2016-06-19 35 views
5

, ben böylece kullanıcıdan bir tamsayı girişi kabul etmek için basit komutu yazın:Python'un değerlendirmesi (input ("Enter input:")) girişin veri tipini neden değiştiriyor? Python 3

x = int(input("Enter a number: ")) 

Ben int() bölümünü atlayıp x = input("Enter a number: ") kullanırsanız, benim girişin veri türü bir dize değil, bir tam sayıdır. Onu anlıyorum. Ben aşağıdaki komutu kullanırsanız

Ancak:

x = eval(input("Enter a number: ")) 

girişin veri türü 'int' olduğunu.

Bu neden oluyor?

+0

Belki de eval() işlevini kullanırken dinamik bir tür denetimi mi? – cssGEEK

+0

'eval', girdiyi kodda yazıldığı gibi ele alır, 'x = 3' kodunda bir tamsayı yapar, bu nedenle x = eval (" 3 ")' i de bir tam sayı yapar, ancak kullanıcının rasgele girmesine izin verir kodları girdilerinde büyük bir sorun olabilir, eğer 'open (__ file __,' w ') yazmışlarsa, close() 'geçerli yürütme dosyasını siler. –

cevap

5

Bu neden oluyor?

x = eval(input("Enter a number: "))

x = eval('input("Enter a number: ")')

eski birinci aramaları input(...) aynı şey değildir, bir dizi alır, ör '5' o zaman int olsun bu yüzden bu şekilde, var, bunu değerlendirir:

>>> eval('5') # the str '5' is e.g. the value it gets after calling input(...) 
5 # You get an int 

iken ikincisi, (daha beklediğin ile uyumlu) bir sayı Çünkü ifadesini 'input("Enter a number: ")'

>>> x = eval('input("Enter a number: ")') 
Enter a number: 5 
>>> x 
'5' # Here you get a str 
0

değerlendirir Python'da geçerli bir ifadedir ve kendini değerlendirir (ve türü int'dir). Örneğin, varolan bir ada sahip bir çöp dizesi girerseniz ('abcdefgh' gibi), bir NameError istisnası yükseltilir (değerlendirilirken istisna kaldırılır).