Str对象没有属性“add”

2024-06-16 12:51:40 发布

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

有人能帮我解决这个问题吗:

import random
import operator
from operator import add, sub, mul
from random import randint

score = 0

name = input("What is your name? ")

for i in range(10):
    n1 = randint(1,10)
    n2 = randint(1,10)
    ops =[["+", operator.add],["-", operator.sub],["*", operator.mul]]

    randomOp = random.choice(list(ops))

    operator = randomOp[0]
    op = randomOp[1]

    prod = op(int(n1), int(n2))

    ask = ("What is",int(n1),operator,int(n2),"?")

    ans = input(ask)
    if ans == ("%d" % (prod)):
        print ("That's right -- well done")
        score = score + 1
    else:
        print ("No, The answer is %d. " % (prod))

print (name, "I asked you 10 questions. You got %d of them right." % (score))
print ("Quiz is finished")

Tags: namefromimportaddisrandomprodoperator
1条回答
网友
1楼 · 发布于 2024-06-16 12:51:40

您为operator名称指定了一个字符串:

operator = randomOp[0]

您现在正在屏蔽operator模块。不要重复使用这样的名称,因为for循环operator.add的下一个迭代现在尝试查找该字符串上的add属性(因此,'+''-'或{}中的一个,无论随机选择的第一个迭代是什么)。在

您还直接导入了3个函数:

^{pr2}$

因此,一个简单的解决方案是使用这3个名称,而不是引用模块上的函数:

ops = (("+", add), ("-", sub), ("*", mul))

在这里我使用元组而不是列表(因为更改代码中的ops序列可能是一个错误)。您也可以将该赋值移出for循环的;每次迭代都重新创建它几乎没有意义。在

相关问题 更多 >