Python 数学游戏不起作用

Python 数学游戏不起作用,python,math,Python,Math,我为我正在制作的一个程序做了一个函数,这是一个数学游戏,你必须输入一个答案,如果答案正确,你就赢了。我认为这个游戏很简单,但出于某种原因,每当你输入答案时,程序就会说它是错的,即使答案是对的 def gameChoice(): print("what game do you want to play? A math game") game_choice = input(">>") if game_choice == 'math game': n

我为我正在制作的一个程序做了一个函数,这是一个数学游戏,你必须输入一个答案,如果答案正确,你就赢了。我认为这个游戏很简单,但出于某种原因,每当你输入答案时,程序就会说它是错的,即使答案是对的

def gameChoice():
    print("what game do you want to play? A math game")
    game_choice = input(">>")
    if game_choice == 'math game':
        number1 = random.randint(1, 30)
        number2 = random.randint(1, 30)
        answer = (number1 + number2)
        print("%d + %d = %d" %(number1, number2, answer))
        player_answer = input(">> ")
        if player_answer == answer:
            print("congrats, you got it right")

        else:
            print("sorry, try again")
守则:

player_answer is a string 

这使得这两个球从来都不相等

player_answer = int(input(">> "))

这会使输入自动成为整数,而不是int,您可以使用literal_eval(来自ast内置)。这将允许一个float或int,以防将来需要支持float。您还需要一些异常处理,以防用户输入字符串或只是按Enter键

然后,您将希望循环,直到用户正确执行为止。一个可能的解决办法是:

import random
from ast import literal_eval

def gameChoice():
    print("what game do you want to play? A math game")
    game_choice = input(">>")
    if game_choice == 'math game':
        number1 = random.randint(1, 30)
        number2 = random.randint(1, 30)
        answer = (number1 + number2)

        while True:
            print("%d + %d = %d" % (number1, number2, answer))
            try:
                player_answer = literal_eval(input(">> "))
            except ValueError:
                print('Please enter a number for the answer')
            except SyntaxError:
                print('Please enter an answer')
            else:
                if player_answer == answer:
                    break
                else:
                    print("sorry, try again")

        print("congrats, you got it right")

player\u answer
是一个字符串,但
answer
是一个int。您可能应该将
player\u answer
转换为一个整数,然后比较两个可能的重复项。。。更接近,但它适用于2.x
raw\u输入
。在这里使用
ast
似乎很愚蠢,这比尝试转换到
int
和捕获(如果不能)要做的工作多得多。我还相信,如果你想让你的代码处理浮动,你应该重构你的代码来处理浮动。在这种情况下,这有点过分了,但我不确定这是不是需要更多的工作。它实际上只是使用“literal_eval”而不是“int”并添加导入。我主要是把它作为int的一个替代品,并没有为程序员做更多的工作,而是为系统做了更多的工作。这太过分了。
import random
from ast import literal_eval

def gameChoice():
    print("what game do you want to play? A math game")
    game_choice = input(">>")
    if game_choice == 'math game':
        number1 = random.randint(1, 30)
        number2 = random.randint(1, 30)
        answer = (number1 + number2)

        while True:
            print("%d + %d = %d" % (number1, number2, answer))
            try:
                player_answer = literal_eval(input(">> "))
            except ValueError:
                print('Please enter a number for the answer')
            except SyntaxError:
                print('Please enter an answer')
            else:
                if player_answer == answer:
                    break
                else:
                    print("sorry, try again")

        print("congrats, you got it right")