我用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()
答案 0 :(得分:2)
您的错误是由您覆盖input
引起的。在第二次迭代中,input
不再是一个函数,而是一个字符串。使用其他名称,例如user_input
。
对变量使用诸如sum
,input
,max
之类的名称是一个常见的错误。应该避免这些,因为它们会覆盖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。循环开始前为“”。