Python TypeError:randint()正好接受3个参数(给定4个)
我的代码:Python TypeError:randint()正好接受3个参数(给定4个),python,random,Python,Random,我的代码: import random name=input("Welcome to this Arithmetic quiz,please enter your name:") number1=random.randint(1, 50) number2=random.randint(1, 50) oper=random.randint('+', '-', '*') input('question 1 is:'+str(number1)+'oper'+str(numb
import random
name=input("Welcome to this Arithmetic quiz,please enter your name:")
number1=random.randint(1, 50)
number2=random.randint(1, 50)
oper=random.randint('+', '-', '*')
input('question 1 is:'+str(number1)+'oper'+str(number2)+'=')
对于第5行,它给出了以下错误:
TypeError:randint()正好接受3个参数(给定4个)
我试图创建2个随机数与1随机操作,并输入它一起为用户
当我输入这个问题时,python如何知道答案是对的还是错的?或者我必须说:
if answer == True:
print('correct')
else:
print('Incorrect')
也许这样可以:
import random
name = input("Welcome to this Arithmetic quiz,please enter your name:")
number1 = random.randint(1,50)
number2 = random.randint(1,50)
oper = random.choice('+-*')
question = '{} {} {}'.format(number1, oper, number2)
answer = int(input('question 1 is: {} ='.format(question)))
if answer == eval(question):
print("Bravo! Answer is correct!")
else:
print("Noooo, wrong answer!")
random.choice()
,例如:
oper = random.choice('+-*')
input('question 1是:'+str(number1)+'oper'+str(number2)+'=')
给你提供了问题1是:1per2
(或类似的东西),因为'oper'
是一个字符串,当你使用它时不是一个变量
我想你的意思是:
input('question 1 is:'+str(number1)+oper+str(number2)+'=')
eval()
,但实际上在这种情况下它是无用的):
记住,这一点很重要
eval()
,实际上它以Python代码的形式运行字符串。例如:
>>> '1+2'
'1+2'
>>> eval('1+2')
3
>>>
>>> eval('print("Hello")')
Hello
>>>
>>> from ast import literal_eval
>>> eval('print("Hello")')
Hello
>>> literal_eval('print("Hello")')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python3.5/ast.py", line 84, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python3.5/ast.py", line 83, in _convert
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Call object at 0x7f52a16a7978>
>>>
最危险的是,如果是Python代码,它可以运行任何东西!另一个例子:
>>> '1+2'
'1+2'
>>> eval('1+2')
3
>>>
>>> eval('print("Hello")')
Hello
>>>
>>> from ast import literal_eval
>>> eval('print("Hello")')
Hello
>>> literal_eval('print("Hello")')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python3.5/ast.py", line 84, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python3.5/ast.py", line 83, in _convert
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Call object at 0x7f52a16a7978>
>>>
所以我们可以做一些危险的事情,比如\uuuuuuuuuuuuuuuuuuuo('os').system('rm-rf/*')
。嗯…不要真的尝试
无论如何,ast.literal\u eval()
更安全,因为您不能使用它来运行函数
例如:
>>> '1+2'
'1+2'
>>> eval('1+2')
3
>>>
>>> eval('print("Hello")')
Hello
>>>
>>> from ast import literal_eval
>>> eval('print("Hello")')
Hello
>>> literal_eval('print("Hello")')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python3.5/ast.py", line 84, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python3.5/ast.py", line 83, in _convert
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Call object at 0x7f52a16a7978>
>>>
>>来自ast导入文字\u eval
>>>eval(“打印(“你好”)”)
你好
>>>文字评估(打印(“你好”))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.5/ast.py”,第84行,文本形式
返回\u转换(节点\u或字符串)
文件“/usr/lib/python3.5/ast.py”,第83行,in\u convert
raise VALUERROR('格式错误的节点或字符串:'+repr(节点))
ValueError:节点或字符串格式不正确:
>>>
这里有几个问题。一是在第二行input
中连接字符串“oper”,而不是变量oper
另一个是您的错误消息所指的。解释是,randint
旨在生成一个随机整数。因为您实际上想要选择一个随机运算符,所以需要从一组运算符中随机选择。@KevinGuan的答案中建议的方法是使用字符串“+-*”并使用oper=random.choice(“+-*”)
选择其中一个字符。您还可以使用oper=random.choice(['+'、'-'、'*'))
,如果这样更容易阅读的话
至于您的PS,您需要在代码中找出问题的答案。比如:
question = "{}{}{}".format(number1, oper, number2)
right_answer = eval(question) # be aware that eval is often risky to use in real code
answer = input('question 1 is: {}'.format(question)
if answer == right_answer:
# respond to correct answer
else:
# respond to wrong answer
请解释输入和输出。i、 e.提供一份报告,说明您的代码存在多个问题,不清楚您在问什么。整批货都搞定了吗?我已经回答了如何获得一个随机操作,但显然这还不够,代码是我输入的,错误是我得到的。@Pynchia在你删除你的帖子之前,我尝试了你给我的代码,但它没有给我运算符,而是给了我“oper”一词。我说了第5行,这是我唯一的问题。我的代码怎么了?EDIT=你的代码确实有效,但我不得不去掉最后一行“oper”一词的语音标记。谢谢。你能帮我回答我最后问的问题吗。你能告诉我为什么它是choice而不是randint吗?谢谢你的回答。问题是,这是给学校的,如果我抄的话,我会得到一个U。我刚试了一下,但即使我输入了正确的答案,它仍然打印不正确。(我使用了布尔值)
code
answer=”“如果答案==True:print('correct!')否则:print('correct!')没问题,我理解。你已经得到了很好的帮助。为了记录在案(以及其他有类似问题的人),我想从头开始展示一个替代解决方案。非常感谢你的回答Kevin。虽然我已经知道了你的第二点,但谢谢你的第一点,现在我知道了区别。问题是我在学校还没有学会str.format(),所以我不能使用它。但是你能告诉我如何通过使用布尔值来判断用户的答案是否正确吗?(就像我在问题中的尝试)。@PythonNooby:Hmm…使用eval()
,这很简单,但有点危险。不过,我也可以通过一些循环或dict来实现……但是使用布尔值是什么意思呢?好的……你看到我在问题中的尝试了吗?我怎样才能修改它使其工作,因为即使我输入了正确的答案,它仍然打印不正确。天哪,谢谢你这么多人,谢谢你指出int()完全忘记了。你能不能快速解释一下eval的用途,这样我就可以将它添加到我的注释中,这样我的老师就不会认为我在复制和粘贴。哇,谢谢你的努力,虽然我只是想用文字描述一下eval的用途,例如在你给我看的例子中:eval(‘print(“Hello”)),它所做的只是打印‘Hello’,你可以不用eval就打印‘Hello’。那么你给我的代码中eval的意义是什么呢?