掷骰子游戏,TypeError:'str'对象不可调用错误

时间:2018-08-23 13:53:22

标签: python python-3.x input

我用Python 3编写了一个小游戏,如果输入不是“ stop”,我想重复掷骰子。如果我写了stop,它将停止程序,所以它正在工作,但是当我写其他东西时,它不会重复。 这是源代码:

print('Throw the dices, then type stop if you want to stop')
from random import *
while input != 'stop':
    random1 = randint(1, 6)
    random2 = randint(1, 6)
    print('The numbers are: ',  random1,' ', random2)
    input = input()

3 个答案:

答案 0 :(得分:2)

您的错误是由您覆盖input引起的。在第二次迭代中,input不再是一个函数,而是一个字符串。使用其他名称,例如user_input

对变量使用诸如suminputmax之类的名称是一个常见的错误。应该避免这些,因为它们会覆盖builtin functions

尽管,我要指出的是,可以使用iter second form来迭代输入直到输入给定值。

from random import randint

print('Throw the dices, then type stop if you want to stop')

for _ in iter(input, 'stop'):
    print('The numbers are: ', randint(1, 6), randint(1, 6))

作为旁注,请尝试避免使用import *,并将导入内容保留在脚本的顶部。

答案 1 :(得分:1)

我认为可能有几件事使您(以及其他Python新用户)感到困惑。该答案将试图明确说明为什么您看到的错误有听起来像是ped脚的风险。

1)可调用是什么意思?

可调用对象是可以通过在对象的末尾放置()来调用的对象(有些情况下,某些可调用对象接受参数,但现在我们假装不接受)。例如,内置函数input是可调用的。例如,您可以像程序一样执行input()。您可以在这里阅读有关该主题的更多详细信息:What is a "callable" in Python?

2)一流的功能

与您可能习惯的其他语言(如Java)不同,Python具有一流的功能。这意味着您可以为函数分配值,并像对象一样传递它们。这对于编程非常强大。但是,这也意味着您可以遍历内置函数,例如input,而可以将input分配给字符串。这就是您的程序所做的。

3)无法调用字符串

字符串是不可调用的数据类型。调用或执行字符串是什么意思?因此,如果您有x = "my_super_string",则x()没有任何意义。因此,如果您执行此操作,Python解释器会给您一个TypeError,说无法调用字符串。

这是代码中发生的情况以及为何获得TypeError的最小示例:

>>> input
<built-in function input>
>>> input = input()
"some string."
>>> input
'some string.'
>>> input()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

请注意,名称input<built-in function input>变为字符串'some_string.'

答案 2 :(得分:0)

您可以同时使用'input'作为变量名和function call。 首先调用输入变量时,Python解释它就像一个str型变量。尝试将该名称更改为,即。 inp并查看其行为。

编辑:您还必须将inp定义为ie。循环开始前为“”。