Python Str对象没有属性";加上「;
有人能帮我解决这个问题吗:Python Str对象没有属性";加上「;,python,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]
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")
您为
运算符名称分配了一个字符串:
operator = randomOp[0]
您现在正在屏蔽操作员
模块。不要重复使用这样的名称,因为for
循环操作符.add
的下一次迭代现在尝试查找该字符串上的add
属性(因此无论第一次迭代是通过随机选择选择哪个,'+'
,'-'
还是'*'
)
您还直接导入了3个函数:
import operator
from operator import add, sub, mul
因此,一个简单的解决方案是使用这3个名称,而不是引用模块上的函数:
ops = (("+", add), ("-", sub), ("*", mul))
我使用元组而不是列表(因为更改代码中的ops
序列可能会出错)。您也可以将该分配移出for
循环;在每次迭代中重新创建它没有什么意义。欢迎使用堆栈溢出!与流行的观点相反,堆栈溢出不是一种调试服务。你确实需要自己先做一些工作。例如,您需要告诉我们您的代码应该做什么,您期望发生什么,以及您认为问题可能在哪里。另请参阅和链接的博客文章。在这种情况下,我能够很快猜测您是如何得到错误的,但是如果您发布了完整的回溯,我们就不必猜测了。