2016-04-06 18 views

cevap

1

Python 3.X, her şeyi kullandığınızı varsayalım kullanıcı girişleri bir dize olacaktır. Hatta "23" veya "0" gibi sayısız şeyleri bile. int(thing), thing'un tam sayı tipinde olduğunu doğrulamıyor. thing'u şu andaki türden tamsayı türüne dönüştürmeyi deniyor, eğer imkansızsa bir ValueError yükseltir.

Gösteri:

>>> while True: 
...  x = input("Enter something: ") 
...  print("You entered {}".format(x)) 
...  print("That object's type is: {}".format(type(x))) 
... 
Enter something: hi 
You entered hi 
That object's type is: <class 'str'> 
Enter something: hi46 
You entered hi46 
That object's type is: <class 'str'> 
Enter something: 
You entered 
That object's type is: <class 'str'> 
Enter something: ]%$ 
You entered ]%$ 
That object's type is: <class 'str'> 
Enter something: 23 
You entered 23 
That object's type is: <class 'str'> 
Enter something: 42 
You entered 42 
That object's type is: <class 'str'> 
Enter something: 0 
You entered 0 
That object's type is: <class 'str'> 
+0

Ah, açıkladığınız için teşekkürler, anlıyorum şimdi! : D – BobZeBuilder

+0

Ayrıca, Python 3.x kullandığımı açıklamak için sorumu da düzelttim. – BobZeBuilder

+0

7.93 gibi bir şeye 'string olarak girilen/girilen bir kayan nokta' olarak başvurabilir miyim? – BobZeBuilder

0

Dize, sen input() bir dize olacaktır her şey. Ve int() ise, C-c hariç, bunların hepsi değer artacaktır.

+0

Üzgünüz, ne c-c' olduğunu açıklayabilir misiniz? – BobZeBuilder

+0

'Ctrl-c' = anahtar kartı kesintisi veya Giriş Sonu –

0

Bir istisna kullanarak isdigit() dayanmadan bunu yapabilirsiniz:

answer = input("Enter an integer: ") 
while not answer.isdigit(): 
    print("That's not a whole number. Try again.") 
    answer = input("Enter an integer: ") 
answer = int(answer) 

isdigit() testler girdi dizesi tamamen int ile dönüştürülebilir sayılardan oluşan olup olmadığını görmek için().

+0

’u belirten diğer herhangi bir tuş kombinasyonu Bu daha mı az verimli mi? – BobZeBuilder

+0

Söylemek için onlara zaman ayırmanız gerekir, eğer test ederseniz, while döngüsünden çıkmak için orijinalin içine bir parça eklemeyi unutmayın. Bir denemenin/dışarıda olmanın biraz daha yavaş olduğunu duydum, ama bu durumda isdigit() 'i çağırmalıyız. Bir Pythonic artı için "Düz iç içe daha iyi" takip ediyor. Ama aynı zamanda “atlamaktan önce bak” felsefesini izler, oysa “af dilemek daha iyidir” daha çok Pythonic olarak değerlendirilir, bu da orijinalin nasıl yazıldığıdır. –

+0

Zamanları iPythons% timeit ve bir girdi yerine bir random.choice kullanarak zamanladım. Orijinal 19.6us'ta geliyordu, oysa bu saat 10.6'da geliyordu. Onları bayt kodlarına ayırdığımda bu, orijinallerin 29 talimatına kıyasla 25 talimat uzunluğundaydı. Yani sanırım bu biraz daha verimli. –