Vylúčenie hodnôt z pola, ak nespadajú do daného rozsahu – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vylúčenie hodnôt z pola, ak nespadajú do daného rozsahu – Python – Fórum – Programujte.comVylúčenie hodnôt z pola, ak nespadajú do daného rozsahu – Python – Fórum – Programujte.com

 

pato830
Newbie
24. 10. 2007   #1
-
0
-

Zdravím všetkých, berte ma na milost, len začinam a žiadny jazyk nemám zvládnutý. Takže som sa rozhodol, že si napišem hru, nejakú jednoduchú, tak som sa rozhodol pre Keno10 :D. Ale mam dva problémy, s ktorými neviem pohnúť:
[seznam]Jeden je ten, že pokiaľ hráč vloži na vstupe hodnotu mimo rozsah povolenej, 1 až 80 vrátane, tak ju zmaže, ale v prípade, že je ich viac, už nie a nastne IndexError, pretože hodnota POZICIA sa bude rovnať hodnote LEN(POLETIP). A nie a nie na to prísť, ako to zapísať. to je jeden problem a ďakujem. :) [/seznam]
[seznam]Druhý problém je taktiež so vstupom. Može totiž byť buď tuple alebo číselná hodnota. Z toho vyplýva, ze pri najbližšom príkaze, ktorý už ale pre čiselnú hodnotu neplati, vyhodí TypeError. Dalo by sa to dať do TRY a EXCEPT a napisať do pokynov, aby sa za každý znak zapísala čiarka :) Ale to sa mi zdá take divné. Pripisať na ku každému vstupu čiarku automaticky, je myslím nemožné, lebo je to tuple. Poprosil by som radu aj k tomuto, stači len nasmerovanie, nechcem aby to niekto za mňa robil. Ďakujem[/seznam]
Tak to by asi bolo všetko, budem vdačný za každu odpoveď, pripadne poukázanie na niečo v programe, čo sa nerobí tak, alebo to ide aj jednoduchšie a pod. Velké diky všetkým.

print '                                Vitajte v hre Keno :)'

print
print ' Tip zapiste v tvare prve cislo, druhe cislo, tretie cislo,...atd'
print ' Maximalny pocet tipov je 10, cisla je mozne tipovat od 1 do 80 :D'
print '*'*90
print
import random
while 1:
try:
poletip=input('Zadaj svoj tip: ')
break
except NameError:
print "Precitajte si pozorne pravidla a zopakujte Vas tip!!! "
except SyntaxError:
print "Precitajte si pravidla a skuste znova!!!"
else:
continue
if len(poletip) not in xrange(1,11):
print
print " Maximalny pocet tipov je 10, vsetky tipy po 10. tipe nebudu zaradene do zrebovania !!!"
poletip2=list(poletip)
del poletip2[10:len(poletip2)]
poletip2.sort()
polekeno=xrange(1,81)
polevylosovane=random.sample(polekeno, 20)
del polekeno
polevylosovane.sort()
vysledok=[]
for pozicia in (xrange(0, len(poletip2))):
if poletip2[pozicia] in xrange(1,81):
vysledok.append(int(poletip2[pozicia] in polevylosovane))
else:
del poletip2[poletip2.index(poletip2[pozicia])]
if len(poletip) > len(poletip2):
print
print " Cisla mimo rozsahu 1 az 80 nebudu zaradene do zrebovania, pretoze nesplnaju podmienky!!! "
print
print '-'*90
print ' Pocet uhadnutych cisiel: ',vysledok.count(1)
print
print ' Vylosovane boli tieto cisla:'
print '--->',polevylosovane
print
print ' Vas tip bol: '
if len(poletip2)==0:
print ' Nezadali ste ani jedno cislo v rozsahu 1 az 80 !!!'
else:
print '--->',poletip2
print '-'*90

Nahlásit jako SPAM
IP: 217.12.51.–
tommz90
Stálý člen
24. 10. 2007   #2
-
0
-

Já osobně bych nepoužil funkci input, ale normálně načítal číslo jedno po druhém a pro ukončení zadávání třeba stisk enter. Při tom bys mohl jednoduše zkontrolovat rozsahy čísel, jejich počet atd. A navíc funkce input není podle mě moc bezpečná.

Nahlásit jako SPAM
IP: 82.209.19.–
pato830
Newbie
24. 10. 2007   #3
-
0
-

Ok, tak skúsim nad tým porozmýšlať, ako by to asi mohlo byť, to pridávanie jednotlivých hodnôt do prázdneho pola po overení, či nebolo zadané niečo iné ako číselná hodnota. Ale musí byť predsa možné upraviť aj ten moj, kedže ide o to, že POZICIA nadobudne po vymazaní niektorej nevyhovujúcej hodnoty z pola rovnakú hodnotu ako LEN(POLETIP2) a v tomto momente prehladáva už neexistujúcu poziciu v POLETIP2, čo sposobuje error. Ďakujem tommz9 velmi pekne za skorú odpoveď. A ešte ma napadlo, že z akého dôvodu je používanie INPUT namiesto RAW_INPUT, keď je vstup ošetrný TRY a EXCEPT? Nerozumiem a rád by som :)

Nahlásit jako SPAM
IP: 217.12.51.–
tommz90
Stálý člen
24. 10. 2007   #4
-
0
-

input je raw_input vyhodnocený funkcí eval

eval(raw_input())

Nahlásit jako SPAM
IP: 82.209.19.–
pato830
Newbie
24. 10. 2007   #5
-
0
-

Snažil som sa to pochopiť, ale nejako mi to nesedi. Najma v spojení s mojim prikladom. Kedže

input() == eval(raw_input())
a teda musia byť zadané len čiselne hodnoty, inak hodi error. A v mojom programe sa pracuje len s čiselnými hodnotami. Zatialčo
raw_input()
načita aj nečiselné hodnoty a to nie je vhodné v mojom programe. Som si to skúšal v shelli aké hodnoty vracia. Takže ja musím použiť iba INPUT alebo zápis EVAL(RAW_INPUT()) , čo je to isté, kedže pracujem len s čiselnými hodnotami. Chápem to zle? Len potom nerozumiem tvojmu dotazu, prečo je to nebezpečné práve v mojom programe, tam je to skôr výhodou v spojení s TRY a EXCEPT.

Nahlásit jako SPAM
IP: 217.12.51.–
pato830
Newbie
26. 10. 2007   #6
-
0
-

Takže chvála debuggeru v pythone :D , skvelý to nastroj, presne viete, čo sa v danom momente deje, to bola podívaná :D Som ten moj "program" trocha poopravoval, myslim, že je to omnoho prehladnejšie a hlavne to funguje bez errorov. Nesmejte sa prosim tomu tretiemu exceptu. Som len amatér- začiatočník v pythone :) V tom debbugeri, ako som to sledoval, tak to dost nezmyselne prehladavalo, teda, ked už podla logiky by nemuselo overovať MIN(POLETIP2). No ale ako som to spravil, tak to mám, ešte sa s tým popasujem. Ďalej tam mám v pláne doplniť nejaký hodnotiaci systém, samozrejme aby bol program v "cykle" , teda až na pokyn užívateľa sa ukonči, inak bude stále dookola možné tipovať. A ak sa zadarí tak aj daku históriu. Zatiaľ som spokojný, bo tomu chápem, čo som napísal a to je podstatné. Kľudne znesiem aj kritiku, nech sa potom tie isté chyby večne neopakujú :) Ďakujem.

print '                                Vitajte v hre Keno :)'

print
print ' Tip zapiste v tvare prve cislo [ciarka] druhe cislo [ciarka] tretie cislo [ciarka] atd!!!'
print ' Maximalny pocet tipov je 10, cisla je mozne tipovat od 1 do 80 '
print ' Program je funkcny nezavisle na promile v krvi !!! :D'
print '*'*90
print
import random
while 1:
try:
poletip=input('Zadaj svoj tip: ',)
if len(poletip) not in xrange(1,11):
print
print " Maximalny pocet tipov je 10, vsetky tipy po 10. tipe budu zmazane !!!"
poletip2=list(poletip[0:10])
del poletip
break
except NameError:
print "Precitajte si pozorne pravidla a zopakujte Vas tip!!! "
except SyntaxError:
print "Precitajte si pravidla a skuste znova!!!"
except TypeError:
print "Aj v pripade zadania len jedneho tipu, piste za tipom ciarku!!! "
else:
continue
poletip2.sort()
polekeno=xrange(1,81)
polevylosovane=random.sample(polekeno, 20)
del polekeno
polevylosovane.sort()
vysledok=[]
zmenapoletip2=len(poletip2)
for pozicia in xrange(0,(len(poletip2))):
if min(poletip2) < 1:
poletip2.remove(min(poletip2))
elif max(poletip2) >80:
poletip2.remove(max(poletip2))
else:
for pozicia in xrange(0,(len(poletip2))):
vysledok.append(int(poletip2[pozicia] in polevylosovane))
del pozicia
if len(poletip2) < zmenapoletip2:
print
print " Tipy zadane mimo rozsah 1 az 80 sa neberu do uvahy pri zrebovani!!!"
del zmenapoletip2
print
print '-'*90
print ' Pocet uhadnutych cisiel: ',vysledok.count(1)
print
print ' Vylosovane boli tieto cisla:'
print '--->',polevylosovane
del polevylosovane
print
print ' Vas tip bol: '
if len(poletip2)==0:
print ' Nezadali ste ani jedno cislo v rozsahu 1 az 80 !!!'
else:
print '--->',poletip2
print '-'*90

Nahlásit jako SPAM
IP: 217.12.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý