Это мой первый пост о программировании! Люди, когда я выполняю этот алгоритм (игра с угадыванием), он не перестает спрашивать меня о большем количестве входов, даже когда я пишу "quit", который должен был оставить слово. Заказ "break" не работает, и я не могу понять, почему. Возможно, он работает, но когда он выходит из цикла, он запускает "startgame()" внизу, но мне нужно, чтобы "startgame()" внизу, чтобы запустить игру в первый раз, поскольку игра находится внутри функцию, и мне нужно вызвать ее, чтобы начать игру.
import random
def startgame():
a = random.randint (1,10)
cont = 0
while True:
b = input("Guess a number: ")
if b == 'quit':
break
elif int(b) > a:
print("Too high!")
cont += 1
True
elif int(b) < a:
print ("Too low!")
cont += 1
True
elif int(b) == a:
print ("You got it right!")
print ('You needed ',cont,'guesses!')
startgame()
startgame()
Любые идеи о том, как это решить?
У вашего кода есть несколько небольших проблем, но он действительно работает, вы просто недостаточно тестировали, чтобы найти свою реальную проблему.
Проблемы:
True
линии ничего не делать, то не нужно их за while
циклы; в while
время while
будет оценивать True
право после него и цикл навсегда.Эта проблема:
break
работает отлично; попробуйте запустить свой скрипт и введите "quit" в первом приглашении, он прекратит работу, как ожидалось.startgame
функцию startgame
после победы в игре. Это вызывает новый, вложенный вызов из игры (подумайте "В начало"), и когда игра прерывается, она заканчивается на предыдущем уровне. Решение заключалось бы в том, чтобы удалить вызов startgame()
и вместо этого обернуть все это за секунду, например, например:
import random
def startgame():
b = 0
while b != 'quit':
a = random.randint(1, 10)
cont = 0
while True:
b = input('Guess a number: ')
if b == 'quit':
break
elif int(b) > a:
print('Too high!')
cont += 1
elif int(b) < a:
print('Too low!')
cont += 1
elif int(b) == a:
print('You got it right!')
print('You needed ', cont, 'guesses!')
startgame()
В такие моменты я обычно использую простую управляющую переменную и запускаю на ней цикл. Например:
right_guess=False
while not right_guess:
а затем просто пойти
if guess=right:
right_guess=True
break
просто удалите startgame() из цикла и замените его на разрыв
import random
def startgame():
a = random.randint (1,10)
cont = 0
while True:
b = input("Guess a number: ")
if b == 'quit':
break
elif int(b) > a:
print("Too high!")
cont += 1
elif int(b) < a:
print ("Too low!")
cont += 1
elif int(b) == a:
print ("You got it right!")
print ('You needed ',cont,'guesses!')
break # remove this break statement if you want to restart it again after winning
startgame ()
TypeError: int() argument must be a string or a number, not 'Quitter'
.startgame
вызов должен быть удален.