Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:randint()正好接受3个参数(给定4个)_Python_Random - Fatal编程技术网

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!")
  • 只接受2个参数,并在它们之间随机选择一个数字。在这种情况下,您需要使用
    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)+'=')
    
  • 要检查答案是否正确,您只需在此处使用如下所示(但您始终可以使用-a-safe-version of
    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的意义是什么呢?