Začátky

149 views
Skip to first unread message

Petr Houba

unread,
Feb 12, 2018, 1:27:30 PM2/12/18
to django-cs
Zdravím Vás,
mám problém, jsem samouk, neumím programovat, a i přesto chci pomalu proniknout ...
učím se základy Pythonu (bylo mi to doporučeno zkuseným programátorem).. prozatím to zvládám, ale už se mořím 2 hodiny s tímhle úkolem a nevím kde mám chybu ???

je to ten jednoduchý program kámen, nůžky, papír viz - http://naucse.python.cz/course/pyladies/beginners/comparisons/

mám to po svém vypsán v notepadu ++ tohle :

# Hra kámen, nůžky, papír :)

tah_pocitace = "kámen"
tah_hráce = input("kámen, nůžky, nebo papír")

if tah_hráce == "kámen":
    if tah_pocitace == "kámen":
        print("Remíza !")
    elif tah_pocitace == "nůžky":
        print("Vyhrál jsi !")
    elif tah_pocitace == "papír":
        print("Prohrál jsi !")
elif tah_hráce == "nůžky":
    if tah_pocitace == "kámen":
        print("Prohrál jsi !")
    elif tah_pocitace == "nůžky":
        print("Remíza !"):
    elif tah_pocitace == "papír":
        print("Vyhrál jsi !")
 elif tah_hráce == "papír":
    if tah_pocitace == "kámen":
        print("Vyhrál jsi !")
    elif tah_pocitace == "nůžky":
        print("Prohrál jsi !")
    elif tah_pocitace == "papír":
        print("Remíza !")
        
else:
    print("Nerozumím, oprav jsi to ")




a když to spustím v cmd, objeví se chyba  - 

(venv) C:\naucse-python\02>python "kamen hra.py"
  File "kamen hra.py", line 17
    print("Remíza"):
                    ^
SyntaxError: invalid syntax



Předem moct děkuji ...
S pozdravem začátečník  Peťan



p.s. ... snad vkládám na dobrý místo, nebo jestli mi doporučíte kam mám "otravovat" s radama pro začátečníka :-//

Honza Král

unread,
Feb 12, 2018, 1:30:48 PM2/12/18
to djan...@googlegroups.com
Ahoj, mas tam na konci radku dvojtecku ktera tam nepatri, bez ni by to
melo byt lepsi.

H
Honza Král
E-Mail: honza...@gmail.com
Phone: +420 606 678585
> --
> --
> E-mailová skupina djan...@googlegroups.com
> Správa: http://groups.google.cz/group/django-cs
> ---
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny
> „django-cs“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny,
> zašlete e-mail na adresu django-cs+...@googlegroups.com.
> Chcete-li tuto diskusi zobrazit na webu, navštivte
> https://groups.google.com/d/msgid/django-cs/b3c216d8-e920-4984-8828-266c308d974f%40googlegroups.com.
> Další možnosti najdete na https://groups.google.com/d/optout.

Petr Viktorin

unread,
Feb 12, 2018, 2:27:48 PM2/12/18
to djan...@googlegroups.com, Petr Houba
On 02/12/2018 07:30 PM, Honza Král wrote:
> Ahoj, mas tam na konci radku dvojtecku ktera tam nepatri, bez ni by to
> melo byt lepsi.
>

Jen Honzu doplním – pořádně se podívej na chybovou hlášku:

[...]
>>
>> (venv) C:\naucse-python\02>python "kamen hra.py"
>> File "kamen hra.py", line 17
>> print("Remíza"):
>> ^
>> SyntaxError: invalid syntax

To «File "kamen hra.py", line 17» říká ve kterém souboru a na kterém
řádku Python chybu našel – což je většinou blízko místu, které chceš
opravit.
V tomhle případě je tedy potřeba pořádně zkontrolovat řádek 17.

Petr Houba

unread,
Feb 13, 2018, 6:39:38 AM2/13/18
to django-cs
Děkuji Vám moc, bylo to tím, nebude vadit když jsem do tohohle vlákna budu psát další prosby či problémy s Pythnem ?

Petr Viktorin

unread,
Feb 13, 2018, 7:12:38 AM2/13/18
to Petr Houba, djan...@googlegroups.com
On 02/13/2018 12:39 PM, Petr Houba wrote:
> Děkuji Vám moc, bylo to tím, nebude vadit když jsem do tohohle vlákna
> budu psát další prosby či problémy s Pythnem ?

Rozhodně ne :)

Radek Svarz

unread,
Feb 14, 2018, 11:49:50 AM2/14/18
to django-cs
Rozhodne vadit nebude.

Mimochodem dost casto misto vnorenych ifu je vhodnejsi si vytvorit mapu hodnot, ze ktere pak vybiras. Kamen, nuzky, papir je dobry priklad - pro ilustraci:

# nastaveni
ruka = {"kamen":1, "nuzky":2, "papir":4}
rozhodci
= {1: "remiza", 0.25:"Vyhral PC", 2:"Vyhral PC", 0.5: "Vyhral Hrac", 4: "Vyhral Hrac"}

# hrajeme - ty hodnoty je potreba menit :)
pc
= ruka.get("kamen")
hrac
= ruka.get("nuzky)

vysledek = pc*hrac
print(rozhodci.get(vysledek))


PS pro pametniky - v 8 bit assembleru bychom samozrejme nenasobili, ale PC bychom dali do 1. 2 bitu, hrace do 2. 2 bitu a vysledek vycetli pres index mapu o velikosti 10 bajtu.
:)

Radek

Petr Messner

unread,
Feb 14, 2018, 1:08:00 PM2/14/18
to djan...@googlegroups.com
Promiň Radku, tvoje řešení je ještě méně přehledné než to se vnořenými ify.

Ale hlavně, ta úloha je pro úplné začátečníky právě pro procvičení ifů. Navíc listy a dicty se v tom kurzu probírají až později.

PM

Dne 14. února 2018 17:49 Radek Svarz <radek...@gmail.com> napsal(a):

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscribe@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/django-cs/352cbfdb-1369-4436-b8cb-118a1002c224%40googlegroups.com.

Radek Svarz

unread,
Feb 16, 2018, 4:39:31 AM2/16/18
to django-cs
Omlouvam se, nedoslo mi, ze to je v ramci kurzu pro zacatecniky na zkouseni ifu. 

V kazdem pripade to je fajn vstup do diskuze. Protoze mozna by stalo za to nekde v kurzu zacit menit uvazovani z ifoveho vnoreneho pekla na mapovani.

Mapovani je a) deklarativni b) vetsinou zabere mene radku kodu a pak se v tom naseka mene chyb

Jak to vidi ostatni?

PS: pro tu mapu, co jsem dal, by mozna pomohl obrazek :)
PPS: v kodu ode mne jsou 2 chybky - 1 preklep a 1 algo - kdo 1. najde algo, ma ode mne ve stredu na pyvu pivo

Radek
EXCEL_2018-02-16_10-28-26.png

Petr Messner

unread,
Feb 16, 2018, 4:51:06 AM2/16/18
to djan...@googlegroups.com
To násobení místo dělení je teda překlep, nebo algo? :)

Dne 16. února 2018 10:39 Radek Svarz <radek...@gmail.com> napsal(a):

Honza Král

unread,
Feb 17, 2018, 8:22:48 AM2/17/18
to djan...@googlegroups.com


On Feb 16, 2018 10:39, "Radek Svarz" <radek...@gmail.com> wrote:
Omlouvam se, nedoslo mi, ze to je v ramci kurzu pro zacatecniky na zkouseni ifu. 

V kazdem pripade to je fajn vstup do diskuze. Protoze mozna by stalo za to nekde v kurzu zacit menit uvazovani z ifoveho vnoreneho pekla na mapovani.

Mapovani je a) deklarativni b) vetsinou zabere mene radku kodu a pak se v tom naseka mene chyb

Mapovani je rozhodne fajn a take bych honna tenhle problem pouzil, ale z te machinace s cisly v tvem kodu se mi mota hlava...

Pritom by stacilo:

if porazi[tah_pocitace][tah_hrace]:
  ...
elif tah_pocitace == tah_hrace:
  ...
else:
  ...


Jak to vidi ostatni?

Nejvic pythonic reseni (asi zbytecne slozite) je mit tridu Tah ktera maji nadefinivane __gt__ a __eq__ :

if Tah(poc) > Tah(hrac):
    ...
elif ....
....

Takovyhle kod je prehledny, implementace se snadno otestuje a vyvine (vyzkousis si to rucne v ipythonu, zkopirujes do testu) a jeji pouziti je primocare.



PS: pro tu mapu, co jsem dal, by mozna pomohl obrazek :)


Kod je jako vtip, pokud ho musis vysvetlovat, pravdepodobne neni moc dobry... ;)

PPS: v kodu ode mne jsou 2 chybky - 1 preklep a 1 algo - kdo 1. najde algo, ma ode mne ve stredu na pyvu pivo

Dalsi ukazka nebezpeci "prilis chytreho" kodu -  schovaji se v nem chyby. Pokud v takhle jednoduche uloze udelas chybu a mas pocit, ze jeji objeveni si zaslouzi pivo, neco je spatne.


Brian Kernighan:

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?


Petr Houba

unread,
Feb 21, 2018, 3:14:13 AM2/21/18
to django-cs
Teda děkuji Všem za reakce, tak je to pro mně všechno nový, jsem zkusil před Pythnem Javu - a tady jsem skončil jako samouk brzo, nechápal jsem spousty věcí, co jak se má psát a v těch třídách jsem měl hokej ... tak proto zkouším pythona.

Jakub Vysoky

unread,
Feb 21, 2018, 8:48:06 AM2/21/18
to djan...@googlegroups.com
stav se na python srazu (praha dneska, brno zitra, ostrava/liberec/plzen taky k dispozici).


nekdy se o tehle vecech dobre popovida i osobne!

2018-02-21 9:14 GMT+01:00 Petr Houba <ucre...@gmail.com>:
Teda děkuji Všem za reakce, tak je to pro mně všechno nový, jsem zkusil před Pythnem Javu - a tady jsem skončil jako samouk brzo, nechápal jsem spousty věcí, co jak se má psát a v těch třídách jsem měl hokej ... tak proto zkouším pythona.

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscribe@googlegroups.com.

Další možnosti najdete na https://groups.google.com/d/optout.

Petr Houba

unread,
Feb 27, 2018, 12:01:45 PM2/27/18
to django-cs
Teď jsem narazil opět na problém, s příkazem for > viz.

Přepisování proměnných
Zkus popsat, jak pracuje následující program.

soucet = 0 

for cislo in 8, 45, 9, 21:
    soucet = soucet + cislo

print(soucet)


výsledek je pak 42 na výstupu  .... ale jak k tomu došel ... pokud se připočítá ke každému číslu 0 > (0+ 8) + (0 + 45) + (0 + 9) + (0 + 21) ... tak výsledek by měl být 77, asi to chápu špatně, a pak další věc není dobře vysvětlená (holt jsem asi starej)  ....
.... ale příkaz for x in range(n):  se spíše vysvětluje taky že v té závorce jsou spíš 3 parametry  > 1) začátek 2) konec 3) po kolika  -- např. for cislo in range(1, 200, 3):  > výstup bude pak že bude od 1 do 200 po 3 skákat až do té 200 .... 

Ales Zoulek

unread,
Feb 27, 2018, 12:39:21 PM2/27/18
to djan...@googlegroups.com
Ahoj,

mne to teda vychazi 83. Coz je taky soucet tech cisel. Proste se v kazdem kroku do promenny `soucet` priradi soucet promennych `cislo` a `soucet` (ta predchozi hodnota).

Tzn udela se:
soucet = 0
soucet = 0 + 8
soucet = 8 + 45
soucet = 53 + 9
soucet = 62 + 21

soucet je tedy po ukonceni cyklu 83.

Sedi?


Viz:

In [1]: soucet = 0

In [2]: for cislo in 8, 45, 9, 21:
   ...:     soucet = soucet + cislo
   ...:

In [3]: print(soucet)
83

In [4]: 8+45+9+21
Out[4]: 83

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/django-cs/a9072164-879c-4a80-86ed-1406afeceb52%40googlegroups.com.

Petr Messner

unread,
Feb 28, 2018, 6:37:50 AM2/28/18
to djan...@googlegroups.com
Ahoj, zkus tohle:


(klikej na Forward)

Dne 27. února 2018 18:01 Petr Houba <ucre...@gmail.com> napsal(a):

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscribe@googlegroups.com.

Petr Houba

unread,
Mar 1, 2018, 1:09:54 PM3/1/18
to django-cs
Děkuji, už sem našel chybu u sebe

jsem si ten kod psal ručně a překlepnul sem se¨

soucet = 0 

for cislo in 8, 45, 9, 21:
    soucet = soucet + soucet

print(soucet)

jsem dal tam 2x soucet :) ... jinak jsem si myslel ze právě kod >

soucet = 6

for cislo in 8, 45, 9, 21:
    soucet = soucet + cislo

print(soucet)

že vlastně projde jen jednou 6+8 = a pak přičítá ty čísla co následují na řádce už bez další 6 ... a šlo by udělat ten program aby byl takhle (6+8) + (45+6) + (9+6) + (21+6), že by na každém řádku přičetl tu 6 tku ?

Jinak Vám moc děkuji..

Jirka Vejrazka

unread,
Mar 1, 2018, 1:48:17 PM3/1/18
to django-cs
Neni to uplne citelne reseni, ale treba:
>>> print(sum([6+i for i in [8, 45, 9, 21]]))

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscribe@googlegroups.com.

Petr Viktorin

unread,
Mar 1, 2018, 3:58:04 PM3/1/18
to ucre...@gmail.com, djan...@googlegroups.com
Všimni si, že:

soucet = 6

for cislo in 8, 45, 9, 21:
soucet = soucet + cislo

print(soucet)

dělá to stejné jako:

soucet = 6

cislo = 8
soucet = soucet + cislo
cislo = 45
soucet = soucet + cislo
cislo = 9
soucet = soucet + cislo
cislo = 21
soucet = soucet + cislo

print(soucet)

Dokázal bys takhle rozepsat to, co chceš aby dělal tvůj program?
> --
> --
> E-mailová skupina djan...@googlegroups.com
> Správa: http://groups.google.cz/group/django-cs
> ---
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny
> „django-cs“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny,
> zašlete e-mail na adresu django-cs+...@googlegroups.com
> <mailto:django-cs+...@googlegroups.com>.
> Chcete-li tuto diskusi zobrazit na webu, navštivte
> https://groups.google.com/d/msgid/django-cs/dd12cbaf-779a-49d3-83e3-1c37ee1b38d7%40googlegroups.com
> <https://groups.google.com/d/msgid/django-cs/dd12cbaf-779a-49d3-83e3-1c37ee1b38d7%40googlegroups.com?utm_medium=email&utm_source=footer>.

Jirka Vejrazka

unread,
Mar 2, 2018, 4:05:14 AM3/2/18
to django-cs
>>> print(sum([6+i for i in [8, 45, 9, 21]]))
že vlastně projde jen jednou 6+8 = a pak přičítá ty čísla co následují na řádce už bez další 6 ... a šlo by udělat ten program aby byl takhle (6+8) + (45+6) + (9+6) + (21+6), že by na každém řádku přičetl tu 6 tku ?


Pardon, tohle mi vcera ulitlo, to neni uplne pro zacatecnika (koukal jsem vcera do sloziteho kodu moc dlouho, omlouvam se).

 Muzes to udelat celkem jednoduchou upravou sveho existujiciho kodu:


soucet = 0 

for cislo in [8, 45, 9, 21]:
    soucet = soucet + cislo + 6

print(soucet)


Alternativne muzes pouzit operator "+=", ktery automaticky pricita k aktualni hodnote promenne, tj.

soucet += cislo +6


  Snad to pomuze :)

    Jirka

 

Petr Houba

unread,
Mar 4, 2018, 2:03:51 PM3/4/18
to django-cs
ad Petr Viktorin ... ještě nejsem na takové úrovni abych si takhle pěkně rozepsal kod :-/ , zatím jdu řádek od řádku a říkám si co to konkrétně dělá, popř. si to snažím rozepsat na papír

ad JirkaV .. aha vlastně stačilo za to jak píšeš dát + 6, to mi nenapadlo, zase jsem o něco chytřejší..

jinak sem přemýšlel jak napsat kod -  jak nakreslit těch 6 (7?) šestiúhelníků (v úloze pro začátečníky), zkoušel jsem nejdřív nakreslit jeden, pak cyklit úhel aby nakreslil jich víc a to pak celé ještě cyklit.. možná to jde asi vyřešit lépe, ale přišel jsem cca po 3 hodinách (fakt mi jela hlava na max.) ... sice to nebude efektivní ale funguje to

from turtle import left, forward, exitonclick, right

for uhel_b in range(5): # dokresli jeden plast navíc
    for uhel_a in range(3): # nakresli 3 vceli plasty
        for vceli_plast in range(1): #jeden vceli plast
            forward(50)
            right(60)
            forward(50)
            right(60)
            forward(50)
            right(60)
            forward(50)
            right(60)
            forward(50)
            right(60)
            forward(50)
        left(60) 
    forward(50)
    left(60)
    
exitonclick()

Petr Viktorin

unread,
Mar 5, 2018, 9:28:14 AM3/5/18
to djan...@googlegroups.com, Petr Houba
Super! Dá se to udělat efektivněji, ale překvapivě často je důležité
spíš že program vůbec funguje, než že by ke stejnému výsledku mohl
potřebovat pětkrát míň času a instrukcí :)
Zefektivnění je ovšem jasný další krok, jestli se tohuto příkladu chceš
věnovat dál.
Reply all
Reply to author
Forward
0 new messages