2016-06-16 16 views
0

私の問題は、任意の入力(正しい形式)が与えられたときにdancer_placingsのコードが正しく生成されません。私はそれが{'1': {'foo': 0},{'bar': 0}}2つのリストから生成された辞書は、私がしたいことをしていません

になりたいとき1人のダンサーの入力は、数1で、fooとbarという名前の2人の踊りは、辞書dancer_placings{'1': {'bar': 0}}ですが、私は明らかにミスを犯してきたので、どのように私は自分のコードを修正することができますそれは私がそれをするつもりですか?私は、問題はあなたがそれぞれのダンスのためのdancer_placingsの値を上書きしていることだと思います

print("Welcome to Highland Scrutineer") 

dancers = [] 
dances = [] 
dancer_placings = {} 

dancers = [] 
dancer_num = int(input("How many dancers were there?: ")) 
while len(dancers) + 1 <= dancer_num: 
    dancers.append(input("What was the number of the dancer? ")) 

print("The list of dancers is:") 
for dancer in dancers: 
    print(dancer) 

dances = [] 
dance_num = int(input("How many dances did these dancers compete in? ")) 

while len(dances) + 1 <= dance_num: 
    dances.append(input("What was the name of the dance? ")) 

print("The list of dances is:") 
for dance in dances: 
    print(dance) 

for dancer in dancers: 
    for dance in dances: 
     dancer_placings.update({dancer:{}}) 
     dancer_placings[dancer].update({dance:0}) 

print(dancer_placings) 

答えて

0

あなたのコードは、いくつかの問題を抱えているが、私は」あなたはdancerplacingsたびに上書きしている

  1. :ちょうどあなたのユースケースを機能させるためにものを扱うでしょ
    dancer_placings.update({ダンサー:{}})

これは必須ではありません。それはインデントレベルを上回るはずです。

  1. 現在、タプルを作成していますが、これは不変です。あなたはリストを使う必要があります。

これを試してみてください:

print("Welcome to Highland Scrutineer") 

dancers = [] 
dances = [] 
dancer_placings = {} 

dancers = [] 
dancer_num = int(input("How many dancers were there?: ")) 
while len(dancers) + 1 <= dancer_num: 
    dancers.append(input("What was the number of the dancer? ")) 

print("The list of dancers is:") 
for dancer in dancers: 
    print(dancer) 

dances = [] 
dance_num = int(input("How many dances did these dancers compete in? ")) 

while len(dances) + 1 <= dance_num: 
    dances.append(input("What was the name of the dance? ")) 

print("The list of dances is:") 
for dance in dances: 
    print(dance) 

for dancer in dancers: 
    dancer_placings[dancer] = [] 
    for dance in dances: 
     dancer_placings[dancer].append({dance:0}) 

print(dancer_placings) 

したがって、これは次の出力が生成されます。

user-macbookpro2:~ user$ python test.py 

Welcome to Highland Scrutineer 

How many dancers were there?: 1 

What was the number of the dancer? 1 

The list of dancers is: 

1 

How many dances did these dancers compete in? 2 

What was the name of the dance? 'foo' 

What was the name of the dance? 'bar' 

The list of dances is: 

foo 

bar 

{1: [{'foo': 0}, {'bar': 0}]} 

ご希望の答えのように見えること!

+0

感謝を!私のコードには、私が取り組まなければならない問題は何と思いますか?私は関数を実装することを知っていますし、クラスが自分のコードの構造に役立つかもしれませんが、今はこれが私にとって合理的なプロジェクトであるかどうかを確認する概念です。 – Artillect

+0

最大の提案は、エッジケースを扱うことです。たとえば、ダンサーを0人にすると、依然として質問が続きます。 – AbrahamB

+0

間違いなく私は忘れてしまっただろう!他に何か? – Artillect

0

は、ここに私のコードです。微調整は、あなたが求めている結果を返す必要があります。

for dancer in dancers: 
    dancer_placings.update({dancer: {}}) 
for dance in dances: 
    dancer_placings[dancer].update({dance: 0}) 

私は迅速なスクラッチ試験を通してそれを実行し、これは結果だった:

{'1': {'bar': 0, 'foo': 0}} 
0

ここに問題のコードのビットがこれです:それは今書き込まれると

for dancer in dancers: 
    for dance in dances: 
     dancer_placings.update({dancer:{}}) 
     dancer_placings[dancer].update({dance:0}) 

、ダンサーによる各反復は、それぞれのダンスをループを持つことになります。しかし、文dancer_placings.update({dancer:{}})は、内側のループの各繰り返しで現在のダンサーの値を「クリア」します。したがって、最後の内部反復のみが「スティック」する。

for dancer in dancers: 
    dancer_placings.update({dancer:{}}) 
    for dance in dances:  
     dancer_placings[dancer].update({dance:0}) 

外側のループでは、各ダンサーのための空の辞書を作成し、内側のループでダンスを更新します:あなたが欲しい

はこのようなものです。

だから、これは(その辞書のキーは、明確な順序を持っていない気づく)を生成します:助けを

Welcome to Highland Scrutineer 
How many dancers were there?: 3 
What was the number of the dancer? 1 
What was the number of the dancer? 2 
What was the number of the dancer? 3 
The list of dancers is: 
1 
2 
3 
How many dances did these dancers compete in? 4 
What was the name of the dance? a 
What was the name of the dance? b 
What was the name of the dance? c 
What was the name of the dance? d 
The list of dances is: 
a 
b 
c 
d 
{'1': {'a': 0, 'b': 0, 'd': 0, 'c': 0}, '3': {'a': 0, 'b': 0, 'd': 0, 'c': 0}, '2': {'a': 0, 'b': 0, 'd': 0, 'c': 0}} 
関連する問題