[英]Try to call a function within itself
我是python的新手。 最近,我遵循在線python課程學習python。 這是課程中的一個簡單問題:
寫調用的函數item_order是需要輸入一個名稱的順序串。 該字符串僅包含客戶可以訂購的商品的單詞,中間用一個空格隔開。 該函數返回一個字符串,該字符串對每個項目的數量進行計數,並按以下順序合並它們:
沙拉:[#沙拉]漢堡包:[#hambruger]水:[#水]。
結果示例為:如果order = "salad water hamburger salad hamburger"
則該函數返回
色拉:2漢堡:2水:1
我自己完成了問題,沒有任何問題。 代碼是:
def item_order (order):
num_sa = 0
num_wa = 0
num_ha = 0
new_order = order.split(' ')
for item in new_order:
if item == 'salad':
num_sa += 1
elif item == 'water':
num_wa += 1
elif item == 'hamburger':
num_ha += 1
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
print('Please enter the order.')
order = raw_input('')
group = item_order(order)
print(group)
但是只是好奇如果輸入的“命令”有一些錯誤,那么我該如何針對這種情況更改代碼。 所以我像這樣修改我的代碼:
def item_order (order):
num_sa = 0
num_wa = 0
num_ha = 0
flag = 0
new_order = order.split(' ')
for item in new_order:
if item == 'salad':
num_sa += 1
elif item == 'water':
num_wa += 1
elif item == 'hamburger':
num_ha += 1
else:
flag = 1
break
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
item_order(fix_order)
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
print('Please enter the order.')
order = raw_input('')
group = item_order(order)
print(group)
但是我發現有一個問題,我無法分辨代碼在哪里有錯誤。
例如:如果我將"salad water hamburger salad hamburge"
作為“訂單”輸入,由於“漢堡”是錯誤的,它將讓我再次輸入。
因此,當我重新輸入正確的訂單"salad water hamburger salad hamburger"
,它將得到以下結果:
“沙拉:2漢堡:1水:1”
但是漢堡包的數量應該是2。我認為嘗試在內部調用item_order()
函數時會出現問題。
有人可以幫我找到錯誤嗎?
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
item_order(fix_order)
此item_order
調用無效。 您沒有使用返回值。
請記住,調用函數不僅會跳到函數的開頭-函數返回后,執行會在調用發生的地方繼續。
在您的情況下,此行是:
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
這些仍然是原始無效order
的變量。
修改此代碼的最簡單方法是更改
item_order(fix_order)
至
return item_order(fix_order)
這樣,您就可以忽略損壞的輸入,而num_*
累計的num_*
計數; 相反,您會將固定訂單的結果轉發給您自己的呼叫者。
錯誤是您的函數item_order返回一個字符串,但是您沒有在任何地方捕獲它。 因此,當您在if語句中調用item_order時,您需要具有一個變量以捕獲其返回的字符串。 例如:
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
group = item_order(fix_order)
return group
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
這將通過在fix_order輸入上返回item_order函數的輸出來解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.