每次尝试都给出一个提示(猜数字游戏)

时间:2020-09-06 21:48:06

标签: python

我正在制作一款要求用户输入数字的游戏。他们尝试了四次,如果输入的数字有误,则会得到提示。

对于用户必须正确输入号码的四次尝试,我该如何尝试仅给出一个提示?例如,在用户第一次尝试错误之后,我希望程序显示even_or_odd提示。

from random import randrange
new_number = randrange(1, 101)

class Hints:
    def __init__(self, new_number):
        self.new_number = new_number
        
    def even_or_odd(self):
        if self.new_number % 2 == 0:
            print('Hint. The number is even.')
        else:
            print('Hint. The number is odd.')
            
    def multiple3to5(self):
        for x in range(3, 6):
            n = self.new_number % x
        if n == 0:
            print(f'Hint. The number is a multiple of {x}', end = ' ' )
            
    def multiple6to10(self):
        for x in range(6, 11):
            n = self.new_number % x
        if n == 0:
            print(f'Hint. The number is a multiple of x {x}', end = ' ')




print('Guess a number beteen 1 and 100.')
hint = Hints(new_number)

for x in range(1, 5):
    is_answer_given = False
    while not is_answer_given:
        try:
            user_input = int(input(f'Attempt {x}: '))
            is_answer_given = True
        except ValueError:
            print('Please enter a numerical value.')
            
    if user_input == new_number and x == 1:    #hint after first attempt
        print('You win!')
        break
    else:
        print('Incorrect!')
        hint.even_or_odd()
        
    if user_input == new_number and x == 2:    #hint after second attempt
        print('You win!')
        break
    else:
        print('Incorrect!')
        hint.multiple3to5()
        
    if user_input == new_number and x == 3:   #hint after third attempt
        print('You win!')
        break
    else:
        print('Incorrect!')
        hint.multiple6to10()
    
    if x == 4:
        print('You are out of attempts!')
        print(f'The number was {new_number}')
        break
        

2 个答案:

答案 0 :(得分:1)

您应该使用if语句检查正确答案。在else语句中,可以使用if-elif语句来检查尝试次数。

if user_input == new_number:
    print('You win!')
    break
else:
    print('Incorrect!')
    if x == 1:
        hint.even_or_odd()
    elif x == 2:
        hint.multiple3to5()
    elif x == 3:
        hint.multiple6to10()
    else:
        print('You are out of attempts!')
        print(f'The number was {new_number}')

看到多次尝试提示的原因是,对于多个if语句,其条件不成立,因此将运行其“ else”块

答案 1 :(得分:1)

这是一个巧妙的把戏:

from random import randrange

new_number = randrange(1, 101)

class Hints:
    def __init__(self, new_number):
        self.new_number = new_number
        self.choices = {
            1: self.even_or_odd,
            2: self.multiple3to5,
            3: self.multiple6to10
        }
        
    def run(self,key):
        action = self.choices.get(key)
        action()
        
    def even_or_odd(self):
        if self.new_number % 2 == 0:
            print('Hint. The number is even.')
        else:
            print('Hint. The number is odd.')
            
    def multiple3to5(self):
        for x in range(3, 6):
            n = self.new_number % x
        if n == 0:
            print(f'Hint. The number is a multiple of {x}', end = ' ' )
        else:
           print("Well, Not a multple of 3 or 5")

            
    def multiple6to10(self):
        for x in range(6, 11):
            n = self.new_number % x
        if n == 0:
            print(f'Hint. The number is a multiple of x {x}', end = ' ')
        else:
           print("Well, Not a multple of 6 or 10")




print('Guess a number beteen 1 and 100.')
hint = Hints(new_number)
print(new_number)
i = 3
win = False
while i >= 1 :
    is_answer_given = False
    while not is_answer_given:
        try:
            user_input = int(input(f'Attempt {i}: '))
            is_answer_given = True
        except ValueError:
            print('Please enter a numerical value.')
            
    if user_input == new_number:   
        print('You win!, Number is: {new_number}')
        win = True
        break

    hint.run(i)
    i -= 1

if not win:
    print("You lost!")
    print(f"Number is {new_number}")