Ošetření vstupu v Pythonu

Ošetření vstupu v Pythonu
« kdy: 14. 05. 2011, 15:09:59 »
urobil som jednoduchý program v pythone:
Kód: [Vybrat]
import random
cislo1 = random.randint(1,4)
cislo2 = random.randint(1,4)
print ("Kolko je:", cislo1, "x", cislo2, "?")

while 1:
    odpoved = input("vasa odpoved je: ")
    try:
        odpoved = int(odpoved)
        break
    except (NameError):
        pass

spr = cislo1*cislo2
if spr==odpoved:
    print("spravne .... si frajer")
else:
    print("zle .... hanbi sa", "je to:", cislo1*cislo2)
problém je ten že ak sa program spýta na výsledok a ja zadám písmeno a nie čislo tak vypíše chybu namiesto toho aby sa spýtal ešte raz až kým nezadám číslo.

chyba:
Kód: [Vybrat]
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
('Kolko je:', 2, 'x', 2, '?')
vasa odpoved je: ddd

Traceback (most recent call last):
  File "/home/tommq/Dokumenty/nasobilka.py", line 7, in <module>
    odpoved = input("vasa odpoved je: ")
  File "<string>", line 1, in <module>
NameError: name 'ddd' is not defined
>>>
kde mam chybu ? diki
« Poslední změna: 15. 05. 2011, 21:34:59 od Petr Krčmář »


Marvin

Re: problém -python program
« Odpověď #1 kdy: 14. 05. 2011, 15:49:13 »
Chybu máš v tom, že používáš špatný input(). Měl bys použít raw_input(). Ten vezme data ze stdin a dál s nima nic nedělá, kdežto input() se je snaží vyhodnotit jako platný pythonovský výraz, což 'ddd' očividně není. Ještě názorněji:

input(vstup) <=> eval(raw_input(vstup))

viz. http://docs.python.org/library/functions.html#input

Re: problém -python program
« Odpověď #2 kdy: 14. 05. 2011, 18:17:46 »
Ked tam das raw_input tiez to este fungovat nebude :-). Ten raw_input tam daj ale v tom try tam handlujes nespravny tym vynimky. Pokial retazec nieje mozne previest na cislo (napr. "ddd") nevyvola sa vynimka NameError ale ValueError. Takze to si este prepis a potom to pojde. Este je myslim taka chyba ze sa ti tam vypisuje napr. ('Kolko je:', 2, 'x', 2, '?'). Je to tym ze pouzivas python 2.7 a tam print nieje funkcia ale prikaz. Pise sa napr.: print "Hello", "World". Bez zatvoriek.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re: problém -python program
« Odpověď #3 kdy: 15. 05. 2011, 00:07:43 »
ad print: můžeš zkusit použít python verze 3. Na většině linuxových distribucí pustíš příkazem "python3" místo "python"

v

Re: Ošetření vstupu v Pythonu
« Odpověď #4 kdy: 16. 05. 2011, 08:28:15 »
ad print: závorky tam být mohou a i kdyby nemohly tak zápis se závorkama odpovídá
print tuple()