今天开始编程。真的有兴趣明年开始我的学位。
我正在使用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
答案 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
>>>
a
和b
是两个不同的对象,因此它们的身份不同,但它们的值相等。
答案 2 :(得分:1)
有几件事:
答案 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))