2016-03-19 30 views
0

Son birkaç saat boyunca bunu denedim ve kodu doğru alamıyorum. Kullanıcı girdisinde (ör. 'Kırmızı', 'mavi', 'yeşil', 'kırmızı') okumak ve söz konusu rengin bir sözlükteki rengini ve sayımını okumak istiyorum. İşte Sözlüğe bir kullanıcı girişi ekleme

benim kodudur - Bir şey özellikle sözlüğünü kurma kesinlikle onunla doğru olmadığını biliyorum

GİRİŞİ (o da sürekli boş dek girişi için sormak için bir süre döngü kullanıcı tarafından girilir vardır) : 'kırmızı' 'mavi', 'yeşil', 'kırmızı'

dict = {} 
car_colours = input("Car: ") 
frequency = 0 
    while car_colours != '': 
    dict['frequency'] = car_colours.count(car_colours) 
    dict['colours'] = car_colours 
    frequency = frequency + 1 
    car_colours = input("Car: ") 
print(dict) 

Ben de döngü için aşağıda istenen çıktıyı almak gerekir varsayıyorum? Herhangi bir yardım için

frequency = 0 
frequency = frequency + 1 

Teşekkür:

ÇIKIŞI

ben ben bile yukarıda ne var bu kodu gerekir aslında bile emin değilim
Cars that are red: 2 
Cars that are blue: 1 

DESIRED!

+0

Lütfen kodu girintileyin - şimdiki zamanın nerede bittiğini söylemek imkansız. –

+0

Dict'ta ne saklamak istiyorsunuz? Her bir * benzersiz * anahtar için bir defada yalnızca * bir * değeri saklayabilirsiniz. – jofel

+0

Üzgünüm @Wojciech Ptak kodu şimdi girintili olmuştur. 'Renk' saklamak istiyorum ve sonra 'frekans' sözlükteki değer olacaktır. Her bir renk için kullanıcı tarafından kaç kez girildiğini (yani frekansı) sayacaktır. – Alvis

cevap

3

Sözlük kurulumunuzda şüphelendiğiniz birkaç sorun var.

'dict', python'da bir anahtar kelimedir, bunun değişken ad olarak kullanılmasını öneriyorum. Python sözlükleri genellikle sipariş edilmez. Frekans ve renk adını ayrı ayrı yazmak yerine, renk adını anahtar olarak kaydedin ve değer olarak sayın. Burada

d = {} 
count = 0 
car_colours = raw_input("Car: ") 
while car_colours != '': 
    if d.has_key(car_colours): 
     d[car_colours] = d[car_colours] + 1 
    else: 
     d[car_colours] = 1 
    count = count + 1 
    car_colours = raw_input("Car: ") 

for k,v in d.iteritems(): 
    print 'Cars that are ' + k + ": " + str(v) 

olan örnek test: Burada

yukarıdaki değişiklikleri kodu enter image description here

+0

Çok teşekkürler Vasanth - bu çok daha iyi görünüyor! 'D.has_key' nereden geliyor? – Alvis

+0

Anahtarın (renk adı) zaten mevcut olup olmadığını kontrol etmenin bir yolu. Zaten mevcutsa, sayacı artırın, aksi takdirde sözlüğe ekleyin. – Vasanth

+0

Teşekkürler Vasanth, mantıklı. Ben bilgisayarınızda çalışıyor biliyorum ama benimki Spyder aracılığıyla bir hata olmaya devam ediyor, ama her şey, bana ^ SyntaxError bilinmeyen hattını Dosya "" Tamam görünüyor: Kullandığınız piton hangi sürümünü – Alvis

2

neden dict daha uygun bir veri yapısı kullanmak?

from collections import defaultdict 

print "Enter car colours and ^C when done..." 
try: 
    car_count = defaultdict(int) 
    while True: 
     car_colour = raw_input("Car colour: ") 
     car_count[car_colour] += 1 
except KeyboardInterrupt: 
    print 
    print "Done with input, now the result" 
    print 

for c in car_count: 
    print "Cars that are %s: %d" % (c, car_count[c]) 

Sonucu olacaktır:

$ python dd.py 
Enter car colours and ^C when done... 
Car colour: red 
Car colour: red 
Car colour: green 
Car colour: blue 
Car colour: ^C 
Done with input, now the result 

Cars that are blue: 1 
Cars that are green: 1 
Cars that are red: 2 
$ 

Not: car_count = defaultdict(int) yılında int düzgün biçimlendirilmemiş bile, bir veri türüdür. defaultdict, dict'u genişletir ve otomatik olarak daha önce erişilmemiş olan her dizine otomatik olarak bu türün başlangıç ​​değerini atar.

İlgili konular