2012-01-31 10 views
0
countries={'TW':'Taiwan','JP':'Japan','AUS':'Australia'} 

def add_country(): 

    while True: 
     new_short=raw_input('Country Name in short:') 
     new_full=raw_input('Country Name in full:') 
     countries[new_short]=new_full 
     answer=raw_input('want to add more?') 
     if answer in ('yes'): 
      return True 
     if answer in ('no'): 
      return False 

    print countries 

add_country() 

私はちょうどPythonを学び始めました。上記のコードは正しくない、誰かが私のためにそれを修正することができますか?基本的には、答えが「はい」の場合はループを1回繰り返し、答えが「いいえ」の場合はループから抜け出したいだけです。 return True/Falseはwhileループに戻りませんか?whileループを繰り返してキャンセルするまで

+0

'( 'はい')' 'ではなく 'と、S''' e''と' ''、y''''と一致するように起こっているの答がyes''、これがあれば'( 'yes')'はタプルではないので、1要素タプルを得るためにコンマをつける: '( 'yes'、)' – juliomalegria

答えて

0
  • 使用break whileループから抜け出すために:
  • while Trueループは、デフォルトでループし続けますので、answer('yes',)であるかどうかをテストする必要は、ありません:
  • は同じですanswer in 'no'であり、answer'n'または'o'または'no'の場合は、 が真になります。それはおそらく の意味ではありません。 answer == 'no'を使用するほうがよい。 answer in ('no',)のようにカンマを追加した場合、('no',)はタプルになり、answerがタプルの項目の1つと等しい場合、条件が満たされます。カンマはここで重要な意味を持っています!

def add_country(): 
    while True: 
     new_short=raw_input('Country Name in short:') 
     new_full=raw_input('Country Name in full:') 
     countries[new_short]=new_full 
     answer=raw_input('want to add more?') 
     if answer == 'no': 
      break 
    print countries 
+0

私は、真の部分を間違って理解しています。ご協力いただきありがとうございます。 – Qin

3

それはちょうどマイナーなフィックスアップを必要とします:

def add_country(): 

    while True: 
     new_short=raw_input('Country Name in short:') 
     new_full=raw_input('Country Name in full:') 
     countries[new_short]=new_full 
     answer=raw_input('want to add more?') 
     if answer == 'no': 
      return False 
     print countries 

add_country() 
+1

これはOPの問題を解決しません。 return文は関数から抜け出し、OPは 'answer == 'yes'ならループし続けます。 – Wilduck

+0

@Wilduck OPには複数の問題があった;-) –

+1

これははるかに良く見える=)。 – Wilduck

0

あなたが代わりに機能を返すのループから抜け出す必要があります。あなたはif answer == 'no'一部を必要としない

if answer == 'yes': 
    break 
if answer == 'no': 
    pass 
    # do nothing 

それは何かのようになります。 returnステートメントは、関数の実行を外します。

0

return機能を終了します。ループを停止するには、breakを使用します。

countries={'TW':'Taiwan','JP':'Japan','AUS':'Australia'} 

def add_country(): 

    while True: 
     new_short=raw_input('Country Name in short:') 
     new_full=raw_input('Country Name in full:') 
     countries[new_short]=new_full 
     answer=raw_input('want to add more?') 
     if answer != 'yes': 
      break 

    print countries 

add_country() 

それはあなたが(それはanswer'n'または'o'のいずれかであったかどうかをチェックする)期待したものやらなかったので、私もを変更したかに注意してください。

+0

ありがとう、それは働いた。 :) – Qin

0

答えが「いいえ」になるまでreturnにしたくないです。戻り値は関数の実行を終了します。ループをcontinueにしたいとします。

1

ループを終了するには、breakコマンドを使用する必要があります。

countries={'TW':'Taiwan','JP':'Japan','AUS':'Australia'} 

def add_country(): 

    while True: 
     new_short=raw_input('Country Name in short:') 
     new_full=raw_input('Country Name in full:') 
     countries[new_short]=new_full 
     answer=raw_input('want to add more?') 
     if answer in ('yes'): 
      answer = True 
      break 
     if answer in ('no'): 
      answer = False 
      break 
     print countries   
     return answer 


add_country() 
+2

なぜ '応答'の条件にループしないのですか?それで、「休憩」の必要はありません。 – Wilduck

+0

@Wilduck彼の例では、彼はそれぞれのケースから「復帰」していました。私は同意する、それは理にかなっていないが、質問に記載されている彼のコードの意図は、その状態の状態でいずれかの条件に戻ることです。 – tkone

+1

Opは「True/Falseを返してもwhileループに戻りませんか?私は彼が「返品」が何を意味するのか混乱していると思う。彼はそれがループの最初に戻ると思ったようです(関数からの戻りではありません)。彼の意図は、ユーザーが「いいえ」と答えてから戻るまで、リストに追加し続けることだったと確信しています。 – Wilduck

関連する問題