我有一個函式 findnums(v),它旨在將從用戶輸入中獲取的 5 個數字附加到串列 v,該串列從 main 開始作為一個空串列。我的 for 回圈中有一個嵌套的 try-except 回圈,用于函式 findnums(v) 嘗試并拒絕非浮點用戶輸入。
我希望我的例外條件忽略具有錯誤用戶輸入的迭代,不將此錯誤輸入傳遞回串列 v,并提示用戶輸入正確輸入。雖然條件不會將錯誤的輸入傳遞給串列,并且會提示用戶重新輸入正確的輸入,但錯誤的資料會計入迭代并且不會被忽略。理想情況下,我希望錯誤輸入迭代的數量不計其數/無??限,并且良好輸入迭代的數量始終等于 5。
這是我的代碼:
def main():
v=[]
findnums(v)
printlist(v)
def findnums(v):
for n in range(0,5):
try:
val=float(input('Please enter you number: '))
v.append(val)
except ValueError:
print("That is an invalid input, please start over.")
#main()
#findnums(v)
return(v)
def printlist(v):
print(v)
我已經嘗試在例外條件下呼叫 main() 和 findnums(v) 函式,以便在出現錯誤資料的情況下重新啟動程式,但是在這兩種情況下,它都不會像我想要的那樣忽略資料,但是它每次給出錯誤輸入時都會重新運行程式,計算最終串列的每條錯誤資料。因此,如果輸入了 3 條壞資料,程式將要求用戶輸入 12 次,并將這 12 項添加到串列 v 中。
我想明白為什么會這樣。資料,無論好壞總是被傳遞給 v,我只是想不出一種只將好的資料傳遞給 v 的方法。
uj5u.com熱心網友回復:
我會為此使用一個while回圈。
def main():
v=[]
findnums(v)
printlist(v)
def findnums(v):
# Reapeat the following until there is a break
while(True):
# If the list has a length of 5, break
if len(v) == 5:
break
try:
val = float(input('Please enter you number: '))
v.append(val)
except:
print("That is an invalid input, please start over.")
def printlist(v):
print(v)
uj5u.com熱心網友回復:
您可以將 try/except 塊放在 while 回圈中。這將一直要求用戶輸入,直到他們輸入浮點數。
def main():
v = []
findnums(v)
printlist(v)
def findnums(v):
for i in range(5):
while True:
try:
val = float(input('Please enter you number: '))
v.append(val)
except ValueError:
print("That is an invalid input, please start over.")
return v
def printlist(v):
print(v)
將陣列傳遞給函式時要小心,因為陣列是通過參考傳遞的。有關更多資訊檢查:通過參考傳遞與按值傳遞有什么區別?
我將如何重新格式化如下所示
def findnums():
v = []
for i in range(5):
while True:
try:
val = float(input('Please enter you number: '))
v.append(val)
except ValueError:
print("That is an invalid input, please start over.")
else:
break
return v
def main():
v = findnums()
print(v)
if __name__ == "__main__":
main()
uj5u.com熱心網友回復:
通常不建議傳入陣列進行修改,因為這可能會在重復呼叫中意外擴展舊陣列。只需從函式回傳陣列:
def main():
v = findnums(5)
printlist(v)
def findnums(n):
v=[]
while len(v) < n:
try:
val=float(input('Please enter you number: '))
v.append(val)
except ValueError:
print("That is an invalid input, please start over.")
return(v)
def printlist(v):
print(v)
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530822.html
上一篇:讀取整數并列印所有完美數字的程式
下一篇:制作逐行條件列
