このコードは、picoctf.com で開催予定のコンテストのプレビューです。提供された元のコードを変更してユーザー入力を許可しましたが、テスト #2 が機能しません。1文字以上の10文字の文字列を入力した場合、数字のみを使用できるように印刷したい。現在、ユーザー入力を整数値に変換して実際のシリアルと比較しようとしていますが、文字が存在する場合、文字は整数値に変換できないため、テストは失敗します。
123456789a は、「基数 10 の int() のリテラルが無効です...」
このコードを修正して正しくテストするにはどうすればよいですか?
**
if int(serial) != serial:
print ("only numbers allowed")
print ('Failed Test 2')
**
#!/usr/bin/env python
# Your goal is to find the input that will verify your robot's serial number
#solution to keep it handy = 0933427186
serial = input ("Please enter a valid serial number from your RoboCorpIntergalactic purchase")
def check_serial(serial):
if len(serial) != 10:
print ('Failed Test 1')
return False
if int(serial) != serial:
print ("only numbers allowed")
print ('Failed Test 2')
return False
if int(serial[0])+int(serial[1]) != 9:
print ('Failed Test 3')
return False
if int(serial[2])*int(serial[3]) != 9:
print ('Failed Test 4')
return False
if int(serial[4])-int(serial[5]) != 2:
print ('Failed Test 5')
return False
if int(serial[5])%int(serial[4]) != 2:
print ('Failed Test 6')
return False
if int(serial[6])/int(serial[7]) != 7:
print ('Failed Test 7')
return False
if int(serial[8])-int(serial[9]) != 2:
print ('Failed Test 8')
return False
if int(serial[7])*int(serial[1]) != 9:
print ('Failed Test 9')
return False
if int(serial[2]) + int(serial[3]) != int(serial[9]):
print ('Failed Test 10')
return False
return True
if check_serial(serial):
print ("Thank you! Your product has been verified!")
else:
print ("I'm sorry that is incorrect. Please use a valid RoboCorpIntergalactic serial number")