2016-04-13 11 views
0

Sadece Python'u öğreniyorum ve eğlenceli bir egzersiz olarak bir arkadaşım bana şu programı yazmamı istedi: rastgele bir anahtar kelimeyi ayrı bir dosyadan alır, seçilen sözcüğü Bir anahtar kelimedeki anahtar kelimeleri ve anahtar kelimeyi ve ona eklenmiş bilgileri içeren bir dize yazdırır (buna 'tanım' adını veririz). Bir kelimeyi alması, Cincinnati kelimesini önüne eklemesiyle bir örtmecilik haline getirmesi ve sonra tanımı vermesi gerekiyordu. Yazdığım kod şu şekildedir.python'da bir sözlükten doğru öğeyi döndürüyor 2.7

import random 

    def cincinnati_word(): 
     list = open("cincinnati_stuff.txt").read().splitlines() 
     word = random.choice(list) 
     return word 

    cincinnati_dict = { 
     'car wash': 'you slip and slide through the legs of at least three hookers while they pee on you', 
     'sweat sock': 'you get your whole foot into an orifice on someone else\'s body. Gettin\' in above the ankle makes it a tube sock', 
     'hot pocket': 'you stick a lit firecracker into someone\'s pocket', 
     'rest home': 'they make the dog chow', 
     'Eggo waffle': 'you\'re having sex with someone and you press a tennis racket over his/her face and scream "Leggo my Eggo!"', 
     'slip \'n slide': 'a kid throws up in the hallway at school', 
     'dust mop': 'you don\'t trim your pubic hair at all', 
     'prom date': 'a hooker agrees to the barter system of payment', 
     'double dip': 'you get two VD\'s from the same partner at the same time', 
     'dog park': 'the PETA shelter throws all the carcasses of the dogs they put down', 
     'soda stream': 'you fart into someone\'s drink through a straw', 
     'gramophone': 'someone blows a trumpet real loud in your ear', 
     'tail pipe': 'you put a gerbil up your butt with a paper towel roll', 

    } 


    for word, meaning in cincinnati_dict.items(): 
     word = cincinnati_word() 
     new_word = cincinnati_dict.get(word) 
     if new_word: 
      print "The Cincinnati Kid: \"The old Cincinnati %s, yeah, that's where %s.\"" % (word, meaning) 
      break 
     else: 
      print "The Cincinnati Kid: \"The Cincinnat %s? That ain't no thing I ever hoid of." %(word) 
     break 

Bana sorun veren kısım, bu kodun neredeyse ... çalışmasıdır. Metin dosyasından başarıyla bir anahtar kelime alır. Bu, sözlükteki anahtarların listesini başarıyla karşılaştırır. Ayrıca sözlükten bir tanımı başarıyla döndürür. Sorun, hangi anahtar kelimenin kullanıldığına bakılmaksızın döndürülen tanımın her zaman aynı olmasıdır. Bugüne kadar yürüttüğüm her testte her zaman bir Cincinnati gramofonunun tanımını döndürür.

Cevabın aptalca belli bir şey olduğundan eminim, ama birkaç gün boyunca buna bakıyorum ve bunun nedenini göremiyorum. Biri tavsiye verebilir mi? Şimdiden teşekkür ediyorum.

cevap

0

İhtiyacınız olmadığında bir döngü (for word, meaning in cincinnati_dict:) kullanıyorsunuz. Koşulsuz break, bir döngü istemediğiniz bir ipucudur.

Bunun yerine, sadece get çağrı ve if durumda meaning yerine new_word kullanın:

word = cincinnati_word() 
meaning = cincinnati_dict.get(word) 
if meaning: 
    print "The Cincinnati Kid: \"The old Cincinnati %s, yeah, that's where %s.\"" % (word, meaning) 
else: 
    print "The Cincinnati Kid: \"The Cincinnati %s? That ain't no thing I ever hoid of." %(word) 
+0

Vay, sağ düzelttim söyledi. Teşekkürler. Yine de, döngü neden bir anlam almayı sürdürdüğünü merak ediyorum. – MacHaggoose

+0

Sadece bir kez yinelemeniz gerekir (her zaman bir "aramaya" vesile olduğunuzdan), yani bir anlam "öğeler" den ilk gelen şeydi. – Blckknght