我開始學習 Python 并嘗試構建一個簡單的計算器。我想讓我的程式檢查是否真的是浮點數number_1,number_2如果不是,重新開始計算。有誰知道我的問題的解決方案?
def calculate():
operator = input("What operator do you wanna use(*,/, ,-)? ")
possible_op = ["*", " ", "-", "/"]
possible_classes = ["<class 'float'>", "<class 'int'>"]
if operator not in possible_op:
calculate()
number_1 = float(input("What is your first number? "))
if number_1.type != "Float" or "Int":
calculate()
number_2 = float(input("What is your second number? "))
if (type(number_2)) not in possible_classes:
calculate()
if operator == " ":
print(number_1 number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
else:
print("Wrong Input")
calculate()
again()
uj5u.com熱心網友回復:
不要對這種回圈使用遞回。請記住,每次遞回呼叫都會使用越來越多的記憶體來保存所有新的區域變數。
此外,您的“錯誤輸入”子句永遠不會被擊中——您已經檢查過操作員是您支持的操作員之一。
def calculate():
while True:
operator = input("What operator do you wanna use(*,/, ,-)? ")
possible_op = " -*/"
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
if operator == " ":
print(number_1 number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
break
uj5u.com熱心網友回復:
float()將始終回傳 afloat或 raise a ValueError,因此在呼叫后檢查 return 的型別是沒有意義的float();要么是 a float,要么你永遠不會到達那行代碼,因為未捕獲的例外將結束函式的執行。相反,您想使用try/except:
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
return calculate()
請注意,在 Python 中使用遞回回圈通常不是一個好主意,因為 Python 不像許多其他語言那樣優化尾呼叫。相反,您應該使用 a while,例如:
possible_op = {
"*": float.__mul__,
" ": float.__add__,
"-": float.__sub__,
"/": float.__truediv__,
}
while True:
operator = input("What operator do you wanna use(*,/, ,-)? ")
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
print(possible_op[operator](number_1, number_2))
break
uj5u.com熱心網友回復:
也許這可以幫助你,是一個單獨的函式,如果給定的數字是浮點數,則回傳 True 或 False
def is_float(number):
if isinstance(number, float):
return True
else:
return False
您可以像這樣在代碼中呼叫它,在這種情況下將數字 number_1 作為引數傳遞:
if is_float(number_1):
# do something
uj5u.com熱心網友回復:
type()方法回傳作為引數傳遞的引數的型別別。您必須檢查回傳的型別別是否是類的實體,float。
你可以這樣做,
isinstance(number_1, float)
這將回傳一個布林值。如果number_1是浮點值,則回傳True,否則回傳False。
uj5u.com熱心網友回復:
您可以使用.isnumeric()來檢查用戶是否輸入了數字,方法如下:
number1 = input("What is your first number? ")
number2 = input("What is your second number? ")
if number1.isnumeric() and number2.isnumeric():
number1 = float(number1)
number2 = float(number2)
.isnumeric()檢查字串中的所有內容是否都是數字。如果是,則回傳,True否則回傳False
這應該作業,謝謝。
uj5u.com熱心網友回復:
您possible_classes的串列是字串串列,而不是類。"<class 'int'>"是type物件的字串表示形式,而不是型別物件本身,所以type(1) in ["<class 'int'>"]總是回傳False.
我建議使用其他一些人建議的 try/except 方法或isinstance()用于單個類,但是如果您特別想檢查多個類的串列,則可以使用以下方法:
possible_classes = [float, int]
# instead of possible_classes = ["<class 'float'>", "<class 'int'>"]
if type(var) not in possible_classes:
# ...
uj5u.com熱心網友回復:
您可以使用 while(True) 來解決這個問題。使用這些型別的回圈,很容易克服這樣的問題。如果您需要更多資訊,請詢問。順便說一句,您使用的type功能不正確。你需要像這樣使用它:
type(var)!="Float"等等
def calculate():
while(True):
operator = input("What operator do you wanna use(*,/, ,-)?(type 'q' to quit ) ")
if operator=="q":
break
possible_op = ["*", " ", "-", "/"]
possible_classes = ["<class 'float'>", "<class 'int'>"]
a=input("What is your first number? ")
b=input("What is your second number? ")
number_1 = float(a)
number_2 = float(b)
if operator not in possible_op:
continue
if type(number_1) != "Float" or "Int":
if operator == " ":
print(number_1 number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
else:
print("Wrong Input")
continue
if (type(number_2)) not in possible_classes:
continue
calculate()
這是我的解決方案,希望對您有所幫助。我還添加了一個退出選項。
What operator do you wanna use(*,/, ,-)?(type 'q' to quit ) q
Process finished with exit code 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/477176.html
