Vrátil jsem se ke svému programu s násobilkou a snažil se ho trochu rozšířit.
Chtěl jsem aby program při špatné odpovědi trochu zmírnil a při dobré zase přidal.
Dal jsem tam zatím 2 obtížnosti když zvolíte střední měl by program při té špatné odpovědi zmírnit.
Problém je v tom že když špatně odpovíte program ještě napíše lehčí příklad,
ale když poté odpovíte správně program vyhodí chybu.
Tady je ten program:
import random
obtiznost=raw_input('Zvol obtiznost:lehka, stredni, tezka ')
if obtiznost == 'lehka':
pocet = input('Pocet prikladu: ')
dobre = 0
spatne = 0
for x in range(pocet):
x = random.randint(2,10)
y = random.randint(2,10)
print x,' x ',y,
odpoved1 = input('= ')
if odpoved1 == x * y:
print 'DOBRE :)'
dobre = dobre + 1
else:
spatne = spatne + 1
print 'SPATNE :(',
print 'protoze', x, 'x', y,'=',x*y
print 'Pocet spravnych odpovedi:',dobre
print 'Pocet spatnych odpovedi:',spatne
if obtiznost == 'stredni':
pocet1 = input('Pocet prikladu: ')
dobre1 = 0
spatne1 = 0
for x in range (pocet1):
x = random.randint(2,10)
y = random.randint(2,10)
c = random.randint(11,50)
print x, 'x', c,
odpoved2 = input('= ')
if odpoved2 == x * c:
print 'DOBRE :)'
dobre1 = dobre1 + 1
else:
print 'SPATNE :(',
print 'protoze', x, 'x', c,'=', x*c
spatne1 = spatne1 + 1
if odpoved2 != x*c:
print x, 'x', y,
odpoved3 = input ('= ')
if odpoved3 == x * y:
print 'DOBRE :)'
dobre1 = dobre + 1
else:
print 'SPATNE :(',
print 'protoze', x,' x', y,'=',x*y
spatne1 = spatne1 + 1
print 'Pocet spravnych odpovedi:',dobre1
print 'Pocet spatnych odpovedi:',spatne1
Nevim jak udělat aby se při špatné odpovědi program vrátil zpátky na 31. řádku (print x,' x ',c)
Nemůže mi někdo poradit?
Fórum › Python
Rozšíření programu s násobilkou
A asi jsem našel tu chybu na 44. řádce (dobre1=dobre + 1) má to být dobre1= dobre1+ 1
Už program chybu nevyhodí ale pokud odpovídáte pořád špatně tak se příklady střídají lehký, těžký, lehký, těžký...............
Nevíte tedy jak to udělat aby při špatné odpovědi dával program jednoduché příklady do doby dokud zas neodpoví uživatel dobře.
Ahoj, rád bych byl v Pythonu uměl :)
Začnu od konce, tak to prosím neber jako rýpání. Asi jsi myslel bez té metody a ne algoritmu... Algoritmus tam máš. Ale anit o nemusíš dávat do objektu, aby se to dalo hodně zjednodušit. Pokaždé když se nějaký kód skoro identicky opakuje, dá se to zjednodušit. A pak... Který řádej je 44? Nechce se mi to počítat a nedal jsi to tady do tagů "kód" taže nevím, ale tuším /.-)
Pak se mi příliš nelíbí že máš loop for x a x v tom loopu deklaruješ pomocí random, možná to funguje, ale čekal bych, že to ude házet chyby.
A teď abych jen nekritizoval.. Nemám tady Python (zatím) tak jen nástřel:
Předně bych použil jen jeden loop a až podle obtížnsti bych měnil rozsah randomu.
import random
obtiznost=raw_input('Zvol obtiznost:lehka, stredni, tezka ')
if obtiznost == 'lehka':
obtiznost = 1
if obtiznost == 'stredni':
obtiznost = 2
if obtiznost == 'tezka':
obtiznost = 3
pocet = input('Pocet prikladu: ')
dobre = 0
spatne = 0
for kolo in range(pocet):
if obtiznost <= 1:
x = random.randint(2,10)
y = random.randint(2,10)
if obtiznost == 2:
x = random.randint(2,10)
y = random.randint(11,50)
if obtiznost >= 3:
x = random.randint(11,50)
y = random.randint(11,50)
print x,' x ',y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
obtiznost = obtiznost + 1
else:
print 'SPATNE :(',
print 'protoze', x, 'x', y,'=',x*y
spatne = spatne + 1
obtiznost = obtiznost - 1
print 'Pocet spravnych odpovedi:',dobre
print 'Pocet spatnych odpovedi:',spatne
Takhle jak jsem to napsal, se mi moc nelíbí ta část, kdy obtížnost převádím na čísla - určitě by to šlo nějak zjednodušit, ale nechce semi tím teď ztrácet čas.
Tak jak jsem to napsal se při špatné/dobré odpovědi bude program chovat tak, že když odpovím dvakrát dobře, tak budu muset udělat tři chyby, aby se mi obtížnost snížila. Aby se snížila hned, muselo by to ještě být doplněno, že když je obtížnost méně jak jedna, tak ať jí přiřadí jedničku a pokud je více než tři, tak ať já přiřadí trojku. Nebo něco takového...
Taky by se tam dalo doplnit, v jaké obtížnosti byly otázky nejčastěji, procentuální úspěšnost při určité obtížnosti atd... :)
Vyzkoušej a dej vědět.
(Nakonec doufám, e to bude fungovat - jen jsem to napsal v poznámkovém bloku a nezkoušel).
Ahoj, rád bych v Pythonu uměl :)
Začnu od konce, tak to prosím neber jako rýpání. Asi jsi myslel bez té metody a ne algoritmu... Algoritmus tam máš. Ale ani to nemusíš dávat do objektu, aby se to dalo hodně zjednodušit. Pokaždé když se nějaký kód skoro identicky opakuje, dá se to zjednodušit. A pak... Který řádek je 44? Nechce se mi to počítat a nedal jsi to do tagů "kód" taže nevím, ale tuším /.-)
Pak se mi příliš nelíbí že máš loop "for x" a x v tom loopu deklaruješ pomocí random, možná to funguje, ale čekal bych, že to bude házet chyby.
A teď abych jen nekritizoval.. Nemám tady Python (zatím) tak jen nástřel:
Předně bych použil jen jeden loop a až podle obtížnsti bych měnil rozsah randomu.
import random
obtiznost=raw_input('Zvol obtiznost:lehka, stredni, tezka ')
if obtiznost == 'lehka':
obtiznost = 1
if obtiznost == 'stredni':
obtiznost = 2
if obtiznost == 'tezka':
obtiznost = 3
pocet = input('Pocet prikladu: ')
dobre = 0
spatne = 0
for kolo in range(pocet):
if obtiznost <= 1:
x = random.randint(2,10)
y = random.randint(2,10)
if obtiznost == 2:
x = random.randint(2,10)
y = random.randint(11,50)
if obtiznost >= 3:
x = random.randint(11,50)
y = random.randint(11,50)
print x,' x ',y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
obtiznost = obtiznost + 1
else:
print 'SPATNE :(',
print 'protoze', x, 'x', y,'=',x*y
spatne = spatne + 1
obtiznost = obtiznost - 1
print 'Pocet spravnych odpovedi:',dobre
print 'Pocet spatnych odpovedi:',spatne
Takhle jak jsem to napsal, se mi moc nelíbí ta část, kdy obtížnost převádím na čísla - určitě by to šlo nějak zjednodušit, ale nechce semi tím teď ztrácet čas.
Tak jak jsem to napsal se při špatné/dobré odpovědi bude program chovat tak, že když odpovím dvakrát dobře, tak budu muset udělat tři chyby, aby se mi obtížnost snížila. Aby se snížila hned, muselo by to ještě být doplněno, že když je obtížnost méně jak jedna, tak ať jí přiřadí jedničku a pokud je více než tři, tak ať já přiřadí trojku. Nebo něco takového...
A taky jak je snad vidět, program bude na střední obtížnost vždy jen jako přechod mezi lehkou a těžkou obtížností - chtělo by to upravit rozsahy, ale střední bylo třeba od 5 do 10, těžké od 10 výš a lehké zase od 5 dolů.
Taky by se tam dalo doplnit, v jaké obtížnosti byly otázky nejčastěji, procentuální úspěšnost při určité obtížnosti atd... :)
Vyzkoušej a dej vědět.
(Nakonec doufám, že to bude fungovat - jen jsem to napsal v poznámkovém bloku a nezkoušel).
A taky ještě bych upravil to
obtiznost=raw_input('Zvol obtiznost:lehka, stredni, tezka ')
za obtiznost=raw_input('Zvol obtiznost:lehka, stredni, tezka ')
Když už mezery, tak všude tejně :)
Vážně byl problém v tom Tvém řádku 44? Já bych nečekal, že to bude házet chybu... Ale možné to je.
A taky jde přičítat takhle (alespoň mělo by)
spatne += 1
a dost možná i jen spatne ++
----------------------
Dále se omlouvám za double post, ale běžný uživatel má mazání zakázáno a editace prostě nefunguje... Vždy se jen refreshne nová příspěvek, ale nikde se neprojeví.
import random
def nahodna_otazka(obtiznost):
obtiznost = int(obtiznost)
x = random.randint(0, 5+obtiznost)
y = random.randint(0, 5+obtiznost)
print " == Kolik je %d * %d == "%(x, y)
odpoved = input('>>> ')
if x*y == odpoved:
print u"Správně!"
return 1
print u"Špatně! Správně to je %d"%(x*y)
return 0
print 10*"=", u" Vítejte v programu Násobilka ", 10*"=", "\n\n"
print u"Vyberte obtížnost (číslo větší než nula)"
obtiznost = input()
while 1:
spravne = nahodna_otazka(obtiznost)
if spravne:
obtiznost = obtiznost + 0.5
else:
obtiznost = obtiznost + 0.5
v random.randint se k horní hranici přičítá obtížnost. Pokud uživatel odpoví dobře, tak se k obtížnosti přičte nějaké číslo (např. 0.5 nebo 0.2)
Ale pokud by uživatel odpovídal moc dlouho dobře, tak by hranice mohla být zas příliš velká a pokud by odpovídal špatně, tak by obtiznost mohla jit do zaporných čísel, takže to by se taky muselo ošetřit..
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Dík za odpovědi něco z toho co jste napsali splácam. Chtěl jsem si totiž zopáknout jestli jsem něco nezapomněl, protože jsem teď dlouho neprogramoval tedy jestli se tomu mému psaní dá říkat programování :)
Už jste mi tady jednou psali ať to tady dávam to tagu, ale já to nějak nepochopil nemohl by mi to prosim ještě někdo vysvětlit?
Ať v tom mém programu nemusíte dlouho hledat např. 44. řádek :)
Udělal jsem to způsobem jak tady napsal filippop. Musel jsem ho upravit no a to jsem asi neměl. Když zvolíte lehkou, těžkou obtížnost ještě to funguje správně, ale když zvolíte stredni program vám zadá jen 1 příklad bez ohledu na to kolik jste zvolili. Nějak se nemohu dopátrat chyby, tak jestli by mi to prosim někdo nezkontroloval. Chtěl bych to mít napsané tak jak mi to tady ukázal filippop. Je to sice delší ale ten program od Blujackera mi není úplně jasný.
Tady je ten program:
import random
obtiznost = raw_input('Zvol obtiznost:lehka, stredni, tezka ')
pocet = input('Pocet prikladu: ')
dobre = 0
spatne = 0
for x in range(pocet):
if obtiznost == 'lehka':
x = random.randint(1,10)
y = random.randint(1,10)
print x,' x', y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
else:
print 'SPATNE :(',
print 'protoze:',x,' x', y,'=',x*y
spatne = spatne + 1
if obtiznost == 'stredni':
if obtiznost < 1:
obtiznost = 1
if obtiznost <= 1:
x = random.randint(1,10)
y = random.randint(1,10)
if obtiznost ==2:
x = random.randint(2,10)
y = random.randint(11,30)
if obtiznost > 3:
obtiznost = 3
if obtiznost >= 3:
x = random.randint(2,11)
y = random.randint(11,50)
print x,' x ',y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
obtiznost = obtiznost + 1
else:
print 'SPATNE :(',
print 'protoze:',x, 'x', y,'=',x*y
spatne = spatne + 1
obtiznost = obtiznost -1
if obtiznost == 'tezka':
x = random.randint(2,11)
y = random.randint(11,100)
print x,' x', y,
odpoved = input('= ')
if odpoved == x * y:
print'DOBRE :)'
dobre = dobre + 1
else:
print 'SPATNE :(',
print 'protoze:',x,' x', y,'=',x * y
spatne = spatne + 1
print 'Mate spravne:',dobre,'prikladu'
print 'Mate spatne:',spatne,'prikladu'
Ahoj Ahoj3, mě se zdá, že jsi to nějak zmastil :) A nevím proč jsi to takhle rozšířil... Když jsem na to tak koukal, tak se divím, že ti to funguje očekávatelně na jakoukoli obtížnost.
Dejme tomu, že po řádek 18 to jde, ale úplně jsi se v tom ochudil o možnost změny obtížnosti.
Ale vem si řádek 2O
if obtiznost == 'stredni':
a řádek 21
if obtiznost < 1:
To ti prostě nemůže fungovat, protože jak může mít variable hodnotu "střední" a zároveň hodnotu 1?
Proč jsi to vlastně musel takhle seskládat dohromady?
Teď musím jít pryč, ale klidně napiš proč jsi to udělal, jak jsi udělal a nějak se s tím poperem :)
Jinak Blujackerovo řešení je hezké, využívá objektu který si na začátku nadefinoval - ten provádí zadávání otázky, její vyhodnocení a posun obtížnosti. No a pak už jen v loopu volá ten objekt s příslušným atributem obtížnosti.
No já to potřeboval takhle zmastit :), to co jsi mi tady napsal je střední obtížnost lehká obtížnost dává
příklady x= 1 až 10
y= 1 až 10
Střední obtížnost má při špatné odpovědi zmírnit a při správné přitížit a to je to co si mi tady napsal.
no a těžká obtížnost x = 1 až 11
y = 11 až 100
Já to zkusim nějak opravit. To bych nemyslel že program s násobilkou bude tak těžký.
Jsem zvědav jak pro mě bude těžký naprogramování hada.
Konečně je to dobře, alespoň když jsem program zkoušel.
Ale více už tady:
import random
obtiznost = raw_input('Zvol obtiznost:lehka, stredni, tezka ')
pocet = input('Pocet prikladu: ')
if obtiznost == 'stredni':
obtiznost = 2
dobre = 0
spatne = 0
for x in range(pocet):
if obtiznost == 'lehka':
x = random.randint(1,10)
y = random.randint(1,10)
print x,' x', y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
else:
print 'SPATNE :(',
print 'protoze:',x,' x', y,'=',x*y
spatne = spatne + 1
if obtiznost < 1:
obtiznost = 1
if obtiznost <= 1:
x = random.randint(1,10)
y = random.randint(1,10)
if obtiznost ==2:
x = random.randint(2,10)
y = random.randint(11,30)
if obtiznost > 3:
obtiznost = 3
if obtiznost >= 3:
x = random.randint(2,11)
y = random.randint(11,50)
print x,' x ',y,
odpoved = input('= ')
if odpoved == x * y:
print 'DOBRE :)'
dobre = dobre + 1
obtiznost = obtiznost + 1
else:
print 'SPATNE :(',
print 'protoze:',x, 'x', y,'=',x*y
spatne = spatne + 1
obtiznost = obtiznost -1
if obtiznost == 'tezka':
x = random.randint(2,11)
y = random.randint(11,100)
print x,' x', y,
odpoved = input('= ')
if odpoved == x * y:
print'DOBRE :)'
dobre = dobre + 1
else:
print 'SPATNE :(',
print 'protoze:',x,' x', y,'=',x * y
spatne = spatne + 1
print 'Mate spravne:',dobre,'prikladu'
print 'Mate spatne:',spatne,'prikladu'
Program má tedy při střední obtížnosti po špatné odpovědi zmírnit a po správné stížit. Lehká obtížnost jsou pouze lehké příklady a těžká obtížnost je ty těžké :). Udělal jsem to tím způsobem jako má tady filippop, ale jestli by jste to tímto způsobem udělali nějak lépe nebo se vám na tom něco nelíbí tak se k té mé spatlanině vyjádřete :)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Rozšíření textboxu — založil Tase
Rozšíření třídy za běhu — založil Ales
Rozšíření projektu o .xaml soubory — založil MiCizek
Rozšíření RAID 5 o další disk — založil ingiraxo
Rozšíření pro Google Chrome — založil Requiem
Moderátoři diskuze