Python3 - 我在这里做错了什么?

时间:2016-03-02 15:37:39

标签: python

今天开始编程。真的有兴趣明年开始我的学位。

我正在使用newboston教我自己,到目前为止一切顺利。 尽管如此,还是要用一段真正简单的代码进行挣扎。

我想要一条消息说“什么是1 + 1”。 用户输入anwser,如果是2,则打印正确的消息。如果没有,打印不正确。

input ("What is 1 + 1\n")
if input is 2:
    print ("correct")
else:
    print("incorrect")
C:\Python31\python.exe "C:/Users/JoeNa/Desktop/Python Study/Experimenting.py"
What is 1 + 1

incorrect

Process finished with exit code 0

6 个答案:

答案 0 :(得分:3)

写如下:

result = input ("What is 1 + 1\n")
if int(result) == 2:
    print("correct")
else:
    print("incorrect")

如果要处理input()的结果,则必须将其存储在新变量中。之后,如果您希望它始终是一个整数,请使用int关键字将其强制转换。

另外,尽量不要使用与input()关键字相同的变量名。

另外,作为附加说明,在这种情况下使用==代替。我建议阅读is关键字vs equals运算符的用法。

答案 1 :(得分:2)

my_val = int(input("What is 1 + 1\n"))

if my_val == 2:
    print ("correct")
else:
    print("incorrect")

input会返回一个字符串,因此您必须将其转换为int

此外,不要在Python内置关键字或函数之后命名变量,因为您可以覆盖它们,并且当您希望稍后在代码中使用它们时失去对它们的访问权限。考虑一下:

>>> input = 'hello'
>>> s = input('enter your name')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
>>> 

您无法在程序中再次调用input函数,因为您已将input设置为字符串,这就是Python解释器出现错误的原因。

ZetCode Python website在Python中有一个关键字列表。

is用于按对象标识比较对象,而==则按其值比较两个对象。你必须理解这些,因为当你交换它们时可能会导致复杂的错误。

考虑一下:

>>> a = [1,2]
>>> b = [1,2]
>>> a is b
False
>>> a == b
True

>>> id(a)
140109265441288
>>> id(b)
140109265454472
>>> 

ab是两个不同的对象,因此它们的身份不同,但它们的值相等。

答案 2 :(得分:1)

有几件事:

  1. input()是一个从键盘读取用户输入为字符串
  2. 的函数
  3. 你调用input()但从不保存它返回给变量的值
  4. 你与&#34;比较&#34;而不是&#34; ==&#34; (虽然这些可能在某些情况下是等效的,但请查看差异,并了解何时使用哪些)
  5. 比较时请确保不要将苹果与橙子(带有int的字符串)进行比较

答案 3 :(得分:1)

使用input ("What is 1 + 1\n")时,用户的输入存储为字符串(文本)。因此,您需要将String转换为整数,以便将其与另一个整数进行比较。

尝试以下方法:

userInput = input ("What is 1 + 1\n")
if int(userInput) == 2 
    print("correct")
else:
    print("incorrect")

int(userInput)会将字符串转换为整数

答案 4 :(得分:1)

以下是一些提示,其中一些是意见问题:

input ("What is 1 + 1\n")

变为:

user_input = input("What is 1 + 1? ")

user_input来自哪里?我刚刚完成了。它只是一个名称,现在指的是用户输入的答案。 input()函数返回一个字符串,你必须给它一个名字(否则它有点浪费时间)。不要使用名称input,这将取代内置的input()功能!就个人而言,我没有在问题的最后添加换行符(\ n),但我总是放一个空格。

因此,user_input属于类str(文本字符串),而2属于类int(整数)。您正在尝试比较不同类的对象 - 通常是不允许的。但是,您没有比较这些值,is比较参考。通常(10次中有9次)您想要查找值是否相等,因此请改用==

if input is 2:
    print ("correct")
else:
    print("incorrect")

变为:

if int(user_input) == 2:
    print("correct")
else:
    print("incorrect")

另外请注意,我注意与括号前的间距保持一致。这只是风格,但值得注意。在某些时候,请查看PEP008,这是Python的样式指南。

答案 5 :(得分:0)

这里有多个混淆点。我们来看看input的文档:

  

然后函数从输入中读取一行,将其转换为字符串(剥离尾部换行符),然后返回该行。

因此,input()返回一个字符串。您在代码中调用了该函数,但实际上并未将返回值存储在任何位置。好的变量是描述性的名称。在您的代码中,您正在寻找answer,因此这是一个不错的选择。这使得代码的开头看起来像这样:

answer = input('What is 1+1?\n')

现在,如果您记得文档,input()会返回字符串

'2'
"2"
'''2'''

这些都是字符串的表示。

2

正如其他人所提到的,您可以使用type()函数检查变量或值的类型:

>>> type(2)
<class 'int'>
>>> type('2')
<class 'str'>

这是一个数字。如果您尝试将数字与字符串进行比较,则它们不相等:

>>> 2 == '2'
False

因此,如果我们想要进行适当的比较,我们需要比较字符串或将answer转换为数字。虽然技术上任一选项都有效,但由于1+1是数学而数学是关于数字的,所以将它转换为数字可能更好:

>>> int('2') == 2
True

除了

目前您正在使用is。如果您查看comparisons上的python文档,您会看到is比较对象标识。但那意味着是什么意思?您可以使用id()函数在Python中找到对象的标识。你正在检查if input is 2: - 哪个*在英语中有意义,但在python中没有意义 - 这实际上检查了什么?好吧,先关闭:

>>> input
<built-in function input>

input是一个功能。所以你要检查的是输入函数数字2(不是 2,而是实际对象)。 id非常偶然,可能会在Python运行之间发生变化。这是我的报告:

>>> id(input)
140714075530368
>>> id(2)
140714073129184

一个有趣的注释 - CPython does some interesting things with small numbers,所以可能 2 is 2返回True,但不一定能保证。但这是:

val = 2
other_val = val
val is other_val  # Will be true

全部放在一起

好吧,既然我们知道该怎么做,这就是你的程序的样子:

answer = input('What is 1+1?\n')
if int(answer) == 2:
    print('Correct!')
else:
    print('Incorrect')

如果有人提供不是数字的输入怎么办?根据您对程序的强大程度,您可以采用以下两种方式之一。第一个,确保字符串只是数字:

if answer.isdigit() and int(answer) == 2:
    print('Correct!')

或者,你可以捕捉到引发的例外情况:

try:
    if int(answer) == 2:
        print('Correct!')
    else:
        print('Incorrect!')
except ValueError:
    print('***ERROR*** {!r} is not a number!'.format(answer))