2016-12-23 7 views
-1

私はプログラミングに慣れていないので、whileループを使って練習しています。これは、私がこの作業をするために使用したロジック、つまり、ファミリツリーリストに追加する名前を要求するコードそれは不器用です。このコードを実行するスマートな方法はありますか?

コードが動作するのがわかりましたが、whileループ内でadd_member関数を再度呼び出さずに家族を追加するリクエストを不正にする方法はありましたか?

編集:理想的には、ユーザーがメンバーの追加を止めるために「いいえ」と入力したかどうかを確認するパラメータを追加していましたが、それは私が苦労している部分ではありません。

family_tree = [] 
family_tree.append("Husband") 
print("This family includes" + str(family_tree)) 



def newbie(name): 
    family_tree.append(name) 

def add_member(): 
    return input("Would you like to add a new member?").lower() 


while add_member() == "yes": 
    new_member = input("Enter the name of the Family member") 
    newbie(new_member) 
    continue 
    add_member() 
    break 
else: 
    print(family_tree) 
+1

ループ内の 'continue'の後のすべては無視されます。 – Barmar

+2

'continue'、' break'、 'else'は何をしていますか? – TigerhawkT3

+0

@ TigerhawkT3私が言ったように、私はプログラミングには新しく、追加するのに便利なものはありますか? – Shady

答えて

2

あなたのロジックはほとんど正しいですが、いくつか問題があります。

ステートメントcontinueステートメントはループ本体の残りの部分をスキップし、ループの先頭に戻ります。通常はifの内部でのみ有効です。条件付きでループの一部をスキップすることができます。ループ本体の中に直接置くだけで、残りのループ本体は無視されるので、これらのステートメントとすべてを削除することができます。continue

だから、それだけで次のようになります。

while add_member() == "yes": 
    new_member = input("Enter the name of the Family member") 
    newbie(new_member) 
else: 
    print(family_tree) 

ここelse:を使用して多くのポイントもありません。ループが完了したら、そのステートメントを実行するだけです。

while add_member() == "yes": 
    new_member = input("Enter the name of the Family member") 
    newbie(new_member) 

print(family_tree) 

whileループ内else:文の目的は、breakステートメントによる出るない限り、ループの終了時にコードを実行することです。しかし、あなたのコードにはbreakステートメントが存在しないので、その例外は決して起こり得ず、print関数が常に呼び出されます。

+0

'while'に' break'がもうないので、 'else'は常に実行されます。その行を削除して、 'print()'呼び出しを1レベル下げることができます。 – TigerhawkT3

2

簡単な修正は、この次のようになりますように

keep_going = True 
while keep_going: 
    new_member = input("Enter the name of the Family member") 
    newbie(new_member) 
    keep_going = (add_member() == "yes") 
else: 
    print(family_tree) 

そして:

while True: 
    new_member = input("Enter the name of the Family member") 
    newbie(new_member) 
    if add_member() != "yes": 
     break 

print(family_tree) 

か。これを書き換える方法はたくさんあります。

+0

あなたの最初の例は、私が「はい」に訂正したとしても動作しませんが、2番目の例はおかげです:) – Shady

+1

おっと。一定。ロジックは間違っていました(もちろん、 "yes"が文字列である必要があります) –

+1

また、私はコードのロジックを変更したことを認識しています。あなたの例では、常に*新しいメンバを追加したい(ループ内のコードは決して実行されないかもしれない)、少なくとも1人のメンバを追加したいと仮定して、少なくとも1回は実際に入る。 –

関連する問題