随机生成数学问题

2024-10-01 13:41:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是生成一个代码来问候用户并询问他们的名字,将他们的名字存储为username。然后生成2个随机数和一个运算。问题被询问给用户。之后,它会检查用户的答案是否正确,也会将1添加到questionsAsked中。如果正确,1将添加到correctAnswers。如果不正确,则会告诉用户正确答案。程序应该在10个问题之后结束(因此while questionAsked > 11)。用户应该得到他们的username以及他们答对了多少个问题。在

我的问题是,当我运行代码时,它会出现NameError: name 'questionAsked' is not defined。我正在努力想办法定义questionAsked。在

以下是我目前所做的:

import random
import math

def test():
    Username=input("What is your name?")
    print ("Welcome"+Username+" to the Arithmetic quiz")

    num1=random.randint(1, 10)
    num2=random.randint(1, 10)

    Ops = ['+','-','*']
    Operation = random.choice(ops)

    num3=int(eval(str(num1) + operation + str(num2)))

    print("What is" +" "+str(num1) + operation +str (num2,"?"))
    userAnswer= int(input("Your answer:"))
    if userAnswer != num3:
        print("Incorrect. The right answer is"+" "+(num3))
        return False

    else:
        print("correct")
        return True

correctAnswers=0
questionsAsked=0
while questionAsked > 11:
    if test () == True: 
        questionsAnswered +=1
        correctAnswers +=1
    if test () == False: 
       questionsAnswered +=1

Tags: 代码用户testifisusernamerandom名字
2条回答

您有一个测试while questionAsked > 11,但不要在代码中的任何其他地方使用该名称。你肯定从来没有定义过它。您可能想测试questionsAsked(使用s)来代替。在

不过,还有其他问题。当你问的问题少于11个而不是更多时,循环应该继续。您还调用test()两次,每次循环只应调用一次。在循环中,您使用了questionsAnswered,但从来没有定义过,也没有增加questionsAsked;您可能想增加后者:

correctAnswers=0
questionsAsked=0
while questionsAsked < 10:
    if test():
        correctAnswers +=1
    questionsAsked +=1

现在test()只被称为一次。你的两个分支都增加了questionsAsked,我把它移出了测试,现在你不再需要检查测试是否失败了。在

因为从0开始计数,所以您需要测试< 10,而不是{}。在

代替while循环,可以使用range()函数使用for循环:

^{pr2}$

现在,for循环负责计算所问问题的数量,您不再需要手动增加变量。在

接下来,您需要将username处理移出test()函数。你不需要每次都询问用户的名字。在循环之前询问用户名一次,这样您就可以在10个问题之后访问用户名:

def test():
    num1=random.randint(1, 10)
    num2=random.randint(1, 10)
    # ... etc.


Username = input("What is your name?")
print("Welcome", Username, "to the Arithmetic quiz")

correctAnswers = 0
for question_number in range(10):
    if test():
        correctAnswers +=1

# print the username and correctAnswers 

您也需要注意test()函数中的名称;您定义了名称Ops和{},但尝试将它们用作ops和{}。这行不通,你需要在任何地方都使用相同的大小写来引用这些名字。Python style guide建议您对本地名称使用所有带下划线的小写字母,以区别于类名(类名使用CamelCase、大写字母的首字母和单词之间没有空格)。在

下一个问题:您使用的str()有两个参数:

print("What is" +" "+str(num1) + operation +str (num2,"?"))

这行不通;双参数str()调用是为了将字节解码为Unicode字符串。在

不要使用字符串连接,只需将值作为单独的参数传递给print()。函数将负责将内容转换为字符串,并为您在单独的参数之间添加空格:

print("What is", num1, operation, num2, "?")

现在在num2和{}之间会有一个空格,但这不是什么大问题。您可以使用^{} method创建一个带有占位符的字符串,其中为您填充了方法的参数,再次自动转换为字符串。这样可以更直接地控制空间:

print("What is {} {} {}?".format(num1, operation, num2))

这三个参数按顺序放置在每个{}出现的地方。在

变量名和缩进有很多差异。记住Python区分大小写。顺便说一句,while循环中的条件将导致程序不询问任何问题。在

例如,您创建了一个名为Ops的操作列表,然后使用random模块从ops中选择一个操作。Python将不可避免地抛出一个错误,因为ops实际上没有定义。相反,您应该使用Ops,因为这是您实际声明的变量,带有大写字母。Python还是区分大小写的。在

同样,Python识别questionAsked和{}之间的区别。这是一个或另一个,所以选择一个名字并保持一致。在

相关问题 更多 >