Обе None
и 0
являются "ложными" в Python, поэтому if guessNumber and guessNumber < secretNumber:
короткие цепи при тестировании guessNumber
, так как это 0
и 0
ложные.
Вы будетенужно сузить проверку, чтобы только поймать None
, изменив тесты вида if guessNumber and ...:
на if guessNumber is not None and ...:
.
Альтернативное решение состоит в том, чтобы полностью избежать проверки догадки, когда они дали недопустимое значение.Вы можете сделать это довольно легко, расширив try
/ except
до try
/ except
/ else
:
for guessTimes in range(1,7):
try:
guessNumber = int(input())
print(type(guessNumber))
print('Guess Number: ' +str(guessNumber))
except ValueError:
print('Secret Number: ' +str(secretNumber))
print('You have to give me a valid integer for your guess.', end = ' ')
else:
# Only run when no ValueError occurs
if guessNumber < secretNumber:
print('You have guessed a number that is too low...')
elif guessNumber > secretNumber:
print('You have guessed a number that is too high...')
elif guessNumber == secretNumber:
print('Great job, you guessed the secret number in only ' +str(guessTimes)+ ' tries!')
print('You should go PRO!')
break
if guessTimes == 1:
print('That is ' +str(guessTimes)+ ' failed attempt thus far, you have ' +str(6-guessTimes)+ ' chances remaining. Please try again.')
else:
print('That is ' +str(guessTimes)+ ' failed attempts thus far, you have ' +str(6-guessTimes)+ ' chances remaining. Please try again.')
else:
# Run when loop exits without break
print('Sorry, that was six tries and lots of fail, better luck next time!')
Преимущество здесь в том, что вы не беспокоитесь о настройке иливообще тестировать guessNumber
, когда он является мусором (без использования None
в качестве значения флага или тому подобного), поэтому, когда это не мусор, вам вообще не нужно проверять флаг None
.
Примечание: в новом коде я удалил guessTimes += 1
и continue
, поскольку for i in range(1, 7):
уже сделал приращение для вас, а continue
, поскольку последнее утверждение в цикле бессмысленно.Я также переместил вывод "слишком много догадок" в else
в цикле for
;вы никогда не сделали бы этот код таким, как написано (поскольку цикл заканчивается на guessTimes
как 6
, guessTimes > 6
всегда ложно), и он сохраняет проверки, чтобы просто автоматически это происходило, если цикл завершается без break
.