2017-11-20 17 views
2

私は、イベントに出席する人の数を集めるコードを書こうとしています。入力された人の数に基づいて、私は何度もa)個体の名前、b)彼らが寄贈したおもちゃの数を聞いてきます。私は情報を別の関数に渡す辞書に入れておきたい。 2番目の機能は、20個以上のおもちゃを寄付した人を選び、その名前と寄付されたおもちゃの数を「レベル1」、それから他のすべてを「レベル2」として印刷します。辞書からのpython印刷

データがある関数から別の関数に正しく渡されていることを確認しました。寄付金額を印刷せずに[]を発行している問題があります。また、レベルの下にエントリをリストする代わりに、各エントリの上にレベルを印刷し続けます。言い換えれば、私が取得しようとしている:

レベル1
セレナゴメス50
ビヨンセ40

レベル2
ウィル・スミス5

私が間違って何をやっています?ここで

は私のコードです:

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     attendees[name]= [amount] 

    return attendees 




def print_data(): 
    attendees = data() 

    for i in attendees: 
     if attendees[i][0] > 20: 
      print('Level 1') 
      print(i, attendees[i]) 

     else:  
      print('Level 2') 
      print(i, attendees[i]) 

print_data() 

そして、ここでは私の出力です:

参加しているどのように多くの人々? 3

名前を入力してください:寄贈さおもちゃのウィル・スミス

数:5

名前を入力してください:セレナゴメスは、寄付さおもちゃの

番号:ビヨンセ:50

名前を入力してくださいを

寄付された玩具の数:40

レベル2
ウィル・スミス[5]

レベル1
セレナゴメス[50]

レベル1
ビヨンセ[40]

+2

ただ、ここで括弧を削除: '出席者の[名前] = [量]は' '出席者の[名前] = amount'する必要がありますそうでなければ、辞書にリストを保存しています。そのため、出力に角括弧が表示されます。 – Igle

+0

なぜ最初にカッコを追加していますか? – quamrana

答えて

1

あなたは2つの間違いを犯しました。あなたはリストaとして入力していましたsの各辞書の要素の値は、あなたが20より大きいすべての値と別のものが少ない20

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees1 = {} 
    attendees2 = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     #amount should be just a variable not list 
     if amount > 20: 
      attendees1[name]= amount 
     else: 
      attendees2[name] = amount 

    return attendees1, attendees2 




def print_data(): 
    attendees1, attendees2 = data() 


    if len(attendees1) > 0: 
     print('Level 1') 
     for i in attendees1: 
      print(i, attendees1[i]) 

    if len(attendees2) > 0: 
     print('Level 2') 
     for i in attendees2: 
      print(i, attendees2[i]) 

print_data() 
+1

ありがとうございます。レベル番号をその下の適切な項目で1回だけ表示させる方法を提案できますか?それはまだ各項目の上にレベルを印刷しています。 – kiki1113

+0

私の悪い、ごめんなさい、コードを更新しました、今すぐ参照してくださいレベル1,2をループの外に一度だけ印刷 –

+0

ありがとうございます。今は、これらのカテゴリに該当する項目がない場合に、印刷しないようにする方法を理解する必要があります。 – kiki1113

0

この2行が編集されるべきである。

attendees[name]= [amount] 
#into 
attendees[name]= amount 
#and 
if attendees[i][0] > 20: 
#into 
if attendees[i] > 20: 
+0

ありがとう、zipa。これは[]問題に対処しますが、レベル番号をその下の適切な項目とともに1回だけ表示する方法についての考えはありますか?それはまだ各項目の上にレベルを印刷しています。 – kiki1113

0

があなたのために、この作品のような何かをするよりも、すべての値を印刷するために見つけるために、2つの異なるループを実行する必要がありますか?

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     attendees[name]= amount 
    return attendees 


def print_data(attendees): 
    level_one = [] 
    level_two = [] 
    for name, count in attendees.items(): 
     if count >= 20: 
      level_one.append((name, count)) 
     else: 
      level_two.append((name, count)) 

    print('Level 1') 
    for name, count in level_one: 
     print(name, count) 

    print('\nlevel 2') 
    for name, count in level_two: 
     print(name, count) 


attendees = data() 
print_data(attendees) 
関連する問題