1

チャレンジは、ユーザーが名前を入力しておじいさんを取り戻すという選択肢を追加することで、以前のチャレンジ「誰があなたのパパですか」(私の成功したコードを参照してください: http://pastebin.com/AU2aRWHk ) を改善することです。プログラムは、息子と父親のペアの辞書を 1 つだけ使用する必要があります。

これを機能させることはできません。これまでのコード全体は、http: //pastebin.com/33KrEMhTで見ることができます。

私は明らかにこの方法を必要以上に難しくしてしまい、今では複雑な世界に閉じ込められています。ここに私がF'dアップしたコードがあります:

# create dictionary
paternal_pairs ={"a": "b",
                 "b": "c",
                 "c": "d"}

# initialize variables
choice = None

# program's user interface
while choice != 0:
print(
"""
   Who's Yo Daddy:

   2 - Look Up Grandfather of a Son
   """
)

choice = input("What would you like to do?: ")
print() 

    # look up grandfather of a son
    if choice == "2":
        son = input("What is the son's name?: ")
        # verify input exists in dictionary
        if son in paternal_pairs.values():
            for dad, boy in paternal_pairs.items():
                if dad == son:
                    temp_son = dad
                    for ol_man, kid in paternal_pairs.items():
                        if temp_son == kid:
                            print("\nThe grandfather of", son, "is", ol_man)
                        else:
                            print("\nNo grandfather listed for", son)
                else:
                    print("\nNo grandfather listed for", son)
        # if input does not exist in dictionary:
        else:
            print("Sorry, that son is not listed. Try adding a father-son pair.")

「2」を選択した後、私の出力:

What is the son's name?: d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

No grandfather listed for d

明らかに一時的に小さなループに閉じ込められ、機能しません。他のすべてのコードは期待どおりに機能します。ヘルプ!

4

1 に答える 1

4

dict の各エントリをループして値を照合し、一致しない場合は、キーと値のペアごとに一致しないことを出力します。

これは、次の単純化されたループと同等です。

>>> for i in range(3):
...     if i == 5:
...         print(i)
...     else:
...         print('Not 5')
... 
Not 5
Not 5
Not 5

代わりにループのelse:句をfor使用してください。すべての値の処理が完了した場合にのみ呼び出されます。一致する場合は a を使用しbreakます。

for ol_man, kid in paternal_pairs.items():
    if temp_son == kid:
        print("\nThe grandfather of", son, "is", ol_man)
        break
else:
    print("\nNo grandfather listed for", son)

ループelse:で使用した場合の句の動作の簡単なデモ:for

>>> for i in range(3):
...     if i == 1:
...         print(i)
...         break
... else:
...     print('Through')
... 
1
>>> for i in range(3):
...     if i == 5:
...         print(i)
...         break
... else:
...     print('Through')
... 
Through

最初の例では、 でループを抜けましたbreakが、2 番目の例では、breakステートメントに到達しなかったため ( inever は に等しかった5)、else:句に到達して出力Throughされます。

于 2012-11-13T17:19:10.750 に答える