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()