簡體   English   中英

Python3 - 我在這里做錯了什么?

[英]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
>>> 

ab是兩個不同的對象,因此它們的身份不同,但它們的值相等。

幾件事:

  1. input()是一個從鍵盤讀取用戶輸入為字符串的函數
  2. 你調用input()但從不保存它返回給變量的值
  3. 你用“是”而不是“==”進行比較(盡管在某些情況下這些可能是等價的,可以查看差異並了解何時使用哪些)
  4. 比較時請確保不要將蘋果與橙子進行比較(帶有int的字符串)

當您使用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_inputstr類(文本字符串),而2int類(整數)。 您正在嘗試比較不同類的對象 - 通常是不允許的。 但是,您沒有比較這些值, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM