[英]An error occurs when you try to assign a data type to a input in python
背景故事:我是python的新手,並且正在編寫一個非常簡單的程序來查找三個數字中的最大值,因此我發現它沒有給出正確的答案。 我認為這可能是一個邏輯問題,並試圖制作流程圖和在線搜索同一程序的示例,我發現了很多,但直到逐行閱讀並意識到這一點之后,我發現這些程序與我的程序之間沒有任何區別。這不是比較的問題,而是我正在接受輸入的方法。 我正在接受這樣的輸入:
num1 = float=(input("Enter first number: "))
浮點數后的這個多余的=符號似乎可以解決問題。 但是,我當時想知道為什么python允許這樣做,如果這樣做有什么作用? python在這里實際上在做什么? 以及它如何改變我的計划的結果?
我的程序:
num1 = float=(input("Enter first number: "))
num2 = float=(input("Enter second number: "))
num3 = float=(input("Enter third number: "))
if (num1 > num2) and (num1 > num3):
print("The largest number is",num1)
elif (num2 > num1) and (num2 > num3):
print("The largest number is",num2)
else:
print("The largest number is",num3)
我的輸入:
Enter first number: 11
Enter second number: 6
Enter third number: 5
輸出:
The largest number is 6
這行是合法的Python,但不是很有用:
num1 = float=(input("Enter first number: "))
這是一條鏈接分配語句,它將input
返回的值分配給兩個名稱: num1
和float
。
這樣做不會調用內置的float
函數-實際上,它隱藏了內置的函數,因此您永遠無法再次調用它。 (如果嘗試,則將收到有關無法調用字符串的TypeError
。)
這是合法的,因為float
和其他內置函數不是關鍵字,也不是其他特殊內容。 它們只是內置命名空間中的變量。
您在這里想要的絕對是float
,而不是隱藏它,就像這樣:
num1 = float(input("Enter first number: "))
那么,為什么它似乎起作用? 確實,這只是偶然地接近工作。 您的num1
, num2
和num3
以及其他字符串,例如字符串'6'
(並且float
最終與num3
相同)。 用>
比較兩個字符串是完全合法的。 但是,這並不是您真正想要的。 字符串按字母順序進行比較,因此'6' > '11'
(因為第一個字符6
大於第一個字符1
)。 這就是為什么要將這些字符串轉換為數字的原因:float 6.0 < 11.0
,正如您期望的數字一樣。
如果您的代碼有問題,則在此處添加=
不能解決問題。 充其量,您只是將錯誤隱藏在另一個錯誤的后面,因此您甚至不再遇到真正的問題。
使用extra =
,您可以將input()
的返回值分配為float
作為變量,從而隱藏了內置的float()
函數。 然后將該值分配給num1
(以及以下各行中的num2
, num3
)。
您應該刪除extra =
以便可以將輸入正確地轉換為數字以進行數字比較。 否則,您的比較將基於字符串,這就是為什么示例輸出中的'6'
大於'11'
。
num1 = float = (input("Enter first number: "))
此代碼讀取用戶的輸入,並將該值分配給num1
和float
。
您可能想要這樣:
num1 = float(input("Enter first number: "))
就目前而言,您的代碼將num1
, num2
和num3
作為字符串進行比較,在這種情況下6
確實是“最大”字符串。
通過將num1
, num2
, num3
和float
分配給input
函數,您將獲得以下變量:
num1 = '11'
num2 = '6'
num3 = '5'
float = '5'
=
運算符是一個賦值運算符,可幫助您隱藏float
函數。 使用它,您可以將新值設置為float
,最后一次輸入將其設置為'5'
。 使用此值,您比較了三個字符串,並且'6'
大於'11'
因此將num2
作為最大輸入。 不建議遮蓋內置函數,但這是python的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.