2016-04-09 19 views
-5

Neden bu hatayı almaya devam ediyorum? Sanırım raw_input() bir input() olarak okunuyor ve kullanıcıların bir string olarak girdiğini göremiyor. Bunu nasıl değiştirebileceğimi bilmiyorum, işe yarayabilir. Ve, hayır, soru: "Python 2.7, kullanıcı girişi ve alıntı olmadan dize olarak işleniyor" sorusunu yanıtlamıyor.Bir dizgiyi değişkene döndürme (unary + için kötü işlenen türü: 'str')

options = ["An animal", "A food", "A fruit", "A number", "A superhero name", "A country", "A dessert", "A year"] 
#"options" become variables 
for i in options: 
    if i[0:3] == "An ": 
     exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 
    else: 
     exec("%s = %s" % (i[2::], raw_input("Enter " + i + " "))) 

bu hatayı recieving devam:

NameError: name 'input' is not defined 
+1

Muhtemelen bu bölüm işaret ediyor: raw_input ("Enter", + i + ""). Bununla neyin yanlış olduğunu görüyor musun? –

+0

@Penguin: Önce bir değişkene "raw_input" ("Enter", + i + "") 'a atayın ve sonra" raw_input "'ın şimdi olduğu yerde değişken yerleştirin. Yani: 'a = raw_input (" Enter ", + i +" ")' ve sonra 'exec ("% s =% s "% (i [3 ::], a)'. –

+1

Bunun olduğunu görüyorum Bu kodla ilgili bir soruyu sorduğunuz ikinci soru ve her ikisi de bu sitede zaten yanıtlanmış konularla ilgilidir. Lütfen sormadan önce sorularınızı araştırmak için biraz daha zaman ayırın. "site: stackoverflow" ile istisna ismini kullanmaya çalışın. com "diğer SO cevapları görmek için. – skrrgwasme

cevap

2

Yeterli bilgi vermedi, ama benim psişik güçlerin Birlikte istendiğinde "bir hayvan gir" söyle, sen input yazdınız. Yani döngü aracılığıyla ilk yinelemesi için, bu olur

exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 

:

exec("%s = %s" % ("animal", "input")) 

Sonra zaman

deneyin zihinsel sen olsun, özellikle, kodunuz ne yaptığını yürümeye ikame işlemi gerçekleşir:

animal = input 

doğrudan Python yorumlayıcısına. Muhtemelen tırnak sağ tarafını çevreleyen anlamına

NameError: name 'input' is not defined 

çalıştırıldığında bir dize olarak tedavi etmek için: getirecek şekilde input, tanımlı değil

exec("%s = '%s'" % ("animal", "input")) # Note that this is unsafe. See the note below. 

Tüm bu söyleniyor, Bu kodun inanılmaz derecede kırılgan olduğunu söylemek zorundayım. Döngü "Bir süper kahraman adı" için yinelemeye başladığında, aynı zamanda superhero name geçerli bir tanımlayıcı olmadığı için kırılacaktır. Bunun yerine, muhtemelen dizgiyi boşluklara ayırmanız ve belki de ikinci kelimeyi almanız ya da tüm boşlukları, altçizgi ile değiştirin. Ek olarak, kullanıcı girdisini dezenfekte etmeniz gerekir, böylece kullanıcı girdide alıntılar sağlayarak kaçamaz. (Veya kullanıcı girdisi ile tamamen exec kullanmaktan kaçınmak daha iyi olurdu. Gerçekten değişken isimlere ihtiyacınız var mı? Neden sadece giriş dizeleri için istenen dizeleri eşleyen bir Python sözlüğü kullanmak değil?)

İlgili konular