在Python中的while循环中调用类的方法只会发生一次

问题描述 投票:0回答:1

当我在下面的代码中调用 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() 并每次由用户输入新的数字猜测。

python-3.x class while-loop
1个回答
0
投票

由于我们看不到您的整个代码(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()

(我对你的语法很困惑)

© www.soinside.com 2019 - 2024. All rights reserved.