[英]Python3 - What am I doing wrong here?
今天開始編程。 真的有興趣明年獲得我的學位。
我正在使用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
寫如下:
result = input ("What is 1 + 1\n")
if int(result) == 2:
print("correct")
else:
print("incorrect")
如果要處理input()的結果,則必須將其存儲在新變量中。 之后,如果您希望它始終是一個整數,請使用int關鍵字進行強制轉換。
另外,盡量不要使用與input()關鍵字相同的變量名。
另外,作為附加說明,在這種情況下使用==而不是。 我建議閱讀is關鍵字vs equals運算符的用法。
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網站在Python中有一個關鍵字列表。
is
用於按對象比較對象,而==
按其值比較兩個對象。 您必須了解這些,因為當您交換它們時可能會導致復雜的錯誤。
考慮一下:
>>> a = [1,2]
>>> b = [1,2]
>>> a is b
False
>>> a == b
True
>>> id(a)
140109265441288
>>> id(b)
140109265454472
>>>
a
和b
是兩個不同的對象,因此它們的身份不同,但它們的值相等。
幾件事:
當您使用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)
將字符串轉換為整數
以下是一些提示,其中一些是意見問題:
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的風格指南。
你在這里有多個困惑點。 讓我們看一下輸入的文檔:
然后,該函數從輸入中讀取一行,將其轉換為字符串(剝離尾部換行符),然后返回該行。
所以, input()
返回一個字符串。 您正在調用代碼中的函數,但實際上並沒有將返回值存儲在任何位置。 好的變量是描述性的名稱。 在您的代碼中,您正在尋找answer
,因此這是一個不錯的選擇。 這使得代碼的開頭如下所示:
answer = input('What is 1+1?\n')
現在,如果您記得文檔, input()
將返回一個字符串 。
'2'
"2"
'''2'''
這些都是字符串的表示。
2
正如其他人所提到的,您可以使用type()
函數檢查變量或值的type()
:
>>> type(2)
<class 'int'>
>>> type('2')
<class 'str'>
這是一個數字。 如果您嘗試將數字與字符串進行比較,則它們不相等:
>>> 2 == '2'
False
因此,如果我們想要進行適當的比較,我們需要比較字符串或將answer
轉換為數字。 雖然從技術上講兩種選擇都有效,但由於1+1
是數學而數學是關於數字的,所以將它轉換為數字可能更好:
>>> int('2') == 2
True
目前你正在使用的is
。 如果你查看有關比較的python文檔,你會看到它is
比較對象標識。 但這意味着什么? 您可以使用id()
函數在Python中找到對象的id()
。 你正在檢查if input is 2:
- 哪個*用英語有意義,但在python中沒有用 - 這實際上檢查了什么? 好吧,先關閉:
>>> input
<built-in function input>
input
是一個功能。 所以你要檢查的是輸入函數是否為數字2
(不是值 2,而是實際對象)。 id非常偶然,可能會在Python運行之間發生變化。 這是我的報告:
>>> id(input)
140714075530368
>>> id(2)
140714073129184
一個有趣的注意事項 - CPython使用小數字做一些有趣的事情 ,所以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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.