2016-06-23 16 views
0

私はPythonを初めて使っています。最近、私はPythonを学ぶためにオンラインのPythonコースに従います。それ自身の中で関数を呼び出そうとします

が入力としてためという名前の文字列を取り item_order という関数を記述します。ここではコースからの簡単な質問です。文字列には、顧客が1つのスペースで区切って注文できるアイテムの単語のみが含まれています。関数は、各項目の数を数えた文字列を返します。

サラダ:[#サラダ]ハンバーガー:[#ハンバーガー]水:[水]。

結果の例がある:2ハンバーグ:2水:order = "salad water hamburger salad hamburger"は、関数が

サラダ返す場合、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"を入力「注文」として入力すると、 'hamburge'が間違っているため、もう一度入力し直すことができます。

"サラダ:2ハンバーガー:1水:1"

しかし、ハンバーガーの数

私はそうした後、正しい順序"salad water hamburger salad hamburger"を再入力し、それは私に結果が得られます私はそれ自身の中で関数item_order()を呼び出そうとすると問題があると思う。

誰かがこのバグを見つけるのを手助けできますか?

答えて

1
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コールは効果がありません。あなたは戻り値を使用していません。

関数を呼び出すだけでは関数の先頭にジャンプするのではなく、関数が返ってから呼び出しが発生したところで実行が継続することに注意してください。あなたのケースで、このラインである

​​3210

これらはまだ元の無効orderから変数です。


このコードを修正する最も簡単な方法は、あなたが壊れて入力し、これまでに蓄積num_*カウントを無視している

item_order(fix_order) 

return item_order(fix_order) 

にその方法を変更することです。代わりに固定電話の結果を自分の発信者に転送しています。

+0

ワウ。私は今、私の問題を理解しています。どうもありがとうございました。 @mrwyattにもあなたのコメントに感謝します。 –

1

あなたの関数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関数の出力を戻すことで問題を解決します。

関連する問題