当我在下面的代码中调用 game.play() 时,while 循环第一次正确运行。如果玩家选择了正确的数字,则会显示消息并结束游戏。但是,如果玩家猜错了数字,则 while 循环将无限运行并继续打印“您的猜测太低......”或“您的猜测太高......”
@dataclass
class NumberGuess:
range: list[int] = field(default_factory=list)
target: int = 0
range_beginning: int = None
range_end: int = None
user_guess: int = None
def set_range(self):
while self.range_beginning is None or self.range_end is None:
try:
self.range_beginning = int(input('Enter the first number in the range: '))
self.range_end = int(input('Enter the last number in the range: '))
except ValueError:
print('Please enter numbers only.')
self.range_beginning = None
self.range_end = None
self.range.append(self.range_beginning)
self.range.append(self.range_end)
def randomize(self):
if self.range_end > self.range_beginning:
self.target = random.randint(self.range_beginning,self.range_end)
else:
self.target = random.randint(self.range_end,self.range_beginning)
def number_guess(self):
while self.user_guess is None:
try:
self.user_guess = int(input(f'Guess a number between {self.range_beginning} and {self.range_end}: '))
except ValueError:
print('Please enter numbers ony.')
@dataclass
class Game:
winner: bool = False
num: NumberGuess() = NumberGuess()
def is_correct(self):
if self.num.target == self.num.user_guess:
print(f'You guessed the correct number: {self.num.target}!')
self.winner = True
else:
if self.num.user_guess > self.num.target:
print('Your guess is too high! Guess again!')
else:
print('Your guess is too low! Guess again!')
self.winner = False
def play(self):
self.num.set_range()
self.num.randomize()
while self.winner is False:
self.num.number_guess()
self.is_correct()
def main() -> None:
game = Game()
game.play()
我预计 while 循环每次执行循环时都会调用 self.num.number_guess() 并每次由用户输入新的数字猜测。
由于我们看不到您的整个代码(NumberGuess 类),
这是假定的预期行为的示例
import random
class Game:
def __init__(self):
self.winner = False
self.guess = 0
self.target = 0
def is_correct(self):
if self.guess == self.target:
print(f'You guessed the correct number: {self.target}!')
self.winner = True
else:
if self.guess > self.target:
print('Your guess is too high! Guess again!')
else:
print('Your guess is too low! Guess again!')
self.winner = False
def number_guess(self):
text = input('Guess the number: ')
self.guess = int(text)
def randomize(self):
self.target = random.randint(1,10)
def play(self):
self.randomize()
while self.winner == False:
self.number_guess()
self.is_correct()
def main() -> None:
game = Game()
game.play()
main()
(我对你的语法很困惑)