Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: tommq 14. 05. 2011, 15:09:59
-
urobil som jednoduchý program v pythone:
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:
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
-
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
-
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.
-
ad print: můžeš zkusit použít python verze 3. Na většině linuxových distribucí pustíš příkazem "python3" místo "python"
-
ad print: závorky tam být mohou a i kdyby nemohly tak zápis se závorkama odpovídá
print tuple()