def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)
name1 = input("choose a country you don't like:")
for i in range(3):
if countries[i] == name1:
print(f"The selected country is {name1}")
countries.pop(i)
name2 = input("choose a country you want like:")
countries.insert(i, name2)
print(countries)
break
else:
print("try again")
functionA()
函式A()
我繼續運行程式,但回圈總是不正確
uj5u.com熱心網友回復:
1 如果代碼都在functionA中
2 應該遍歷國家的長度(這樣才能判斷最后一個元素)
3 應該使用 continue 跳出這個回圈而不是回呼
def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)
name1 = input("choose a country you don't like:")
for i in range(len(countries)):
if countries[i] == name1:
print(f"The selected country is {name1}")
countries.pop(i)
name2 = input("choose a country you want like:")
countries.insert(i, name2)
print(countries)
break
else:
print("try again")
continue
functionA()
uj5u.com熱心網友回復:
將來,無論您的問題有多復雜,您都應該嘗試更好地解釋您所面臨的問題。
(值得一提的是,Python 已經內置了查找陣列中元素索引的方法,但我假設你想自己實作一些東西)
現在,您的函式的問題是,如果名字與輸入不匹配,則再次呼叫該函式,而不是移動到下一次迭代。最簡單和最快的解決方案是添加一個標志來檢查是否找到了所選國家/地區。此外,如果您需要索引,那么回圈串列的更 Pythonic 方法是使用 enumerate 函式。所以最后:
def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)
was_found = False
name1 = input("choose a country you don't like:")
for i, country_name in enumerate(countries):
if country_name == name1:
print(f"The selected country is {name1}")
countries.pop(i)
name2 = input("choose a country you want like:")
countries.insert(i, name2)
print(countries)
was_found = True
break
if not was_found:
print("try again")
functionA()
一個更優雅的解決方案是不首先將重試邏輯添加到此函式中,而是回傳一個用 None 或空字串初始化的默認值,并在函式外部處理它。
uj5u.com熱心網友回復:
這是因為 for 回圈內部的邏輯:如果第一個元素不等于 name1,則再次呼叫 functionA。相反,您應該檢查是否在 for 回圈結束時找到了 name1。
def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)
name1 = input("choose a country you don't like:")
found = False
for i in range(len(countries)): # More robust, in case you need to change the list's size
if countries[i] == name1:
print(f"The selected country is {name1}")
name2 = input("choose a country you want like:")
countries[i] = name2 # We can just replace name1 with name2.
print(countries)
found = True
break
if not found:
print("try again")
functionA()
functionA()
您還可以使用以下方法以更簡潔的方式獲得相同的結果index
:
def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)
name1 = input("choose a country you don't like:")
index = countries.index(name1)
if(index == -1):
print("try again")
functionA()
else:
name2 = input("choose a country you want like:")
countries[index] = name2 # We can just replace name1 with name2.
print(countries)
functionA()
countries.index(name1)
如果 name1 不在串列中,則回傳 -1,否則回傳我們可以找到它的索引。
uj5u.com熱心網友回復:
試試這個
def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
removeIndex = 0
print(countries)
while True:
name1 = input("choose a country you don't like:")
if name1 not in countries:
print("try again")
continue
print(f"The selected country is {name1}")
removeIndex = countries.index(name1)
countries.pop(removeIndex)
name2 = input("choose a country you want like:")
countries.insert(removeIndex, name2)
print(countries)
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470298.html
上一篇:如何將數字轉換為字串?
下一篇:R中不同變數的CAGR計算