IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Funkce-rada pro nováčka

Aktivity
Avatar
Lukáš U
Člen
Avatar
Lukáš U:12.2.2019 7:57

Zdravím, jsem v Pythonu úplný nováček a potřeboval bych trochu objasnit funkce. Udělal jsem jednoduchý textový prográmek, který simuluje souboj mezi hráčem a protivníkem, abych ho zpřehlednil, tak jsem si ho chtěl dát do funkcí, ale to je pro mě zatím něco nereálného. Mám Python 3.7.2

Ukázka:

import random

def hrac():
uthrac= random.randin­t(2,12)+10
print("základní útok hráče", uthrac)
defhrac= random.randin­t(2,12)+10
print("základní obrana hráče", defhrac)
zivhrac= random.randin­t(2,12)+20
print("základní životy hráče",zivhrac)
print("")

def proti():
utproti= random.randin­t(2,12)+10
print("základní útok protivníka", utproti)
defproti= random.randin­t(2,12)+10
print("základní obrana protivníka", defproti)
zivproti= random.randin­t(2,12)+20
print("základní životy protivníka",ziv­proti)
print("")

hrac()
proti()

Chtěl bych si ve funkci nadefinovat proměnné utoku,obrany a zivotu, ale chtel bych pak s nimi pracovat i mimo funkci, ale už nevím, jak to udělat, jelikož když pak vypíšu:

print(uthrac)

Tak mi to hodí chybu, což chápu, že mám něco špatně, ale nevím co. Zkoušel jsem i různě pracovat s return, ale asi mi to pořád není jasné a něco mi uniká.

Děkuji za jakoukoliv pomoc při objasnění funkcí a speciálně, když ve funkci vytvořím nějakou proměnnou, jak ji poté dostat ven :-D

Zkusil jsem: Zkoušel jsem už všechno možné, ale jsem z toho jelen :-)

Chci docílit: Potřeboval bych zjistit jak pracovat dále v programu s proměnnou, kterou jsem si nadefinoval ve funkci

 
Odpovědět
12.2.2019 7:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.2.2019 10:14

Python moc neznam. Takze neco vim a neco je s pomoci google. S trochou stesti to bude fungovat.

def utok(hrac1, hrac1):
  neco_proved()
  return hrac1

hrac1 = utok (hrac1, hrac2)

Nebo to uloz do pole a predavej indexy. Tady mas 2 moznosti, jak by to v Py mohlo fungovat.

class Hrac:
     def __init__(self, x, y):
         self.x = x
         self.y = y

def utok(a, b):
  global  pole
  pole[a]  = neco_proved()
  pole[b]  = neco_proved()

def obrana(pole, a, b):
  pole[a]  = neco_proved()
  pole[b]  = neco_proved()
  return pole

pole = array()
pole.insert(Hrac(1, 2))
pole.insert(Hrac(3, 4))
utok(0, 1)
pole = obrana(pole, 0, 1)

Jo, a bylo by fajn, kdybys kod psal do code bloku, tlacitko editoru </>

Editováno 12.2.2019 10:16
 
Nahoru Odpovědět
12.2.2019 10:14
Avatar
Lukáš U
Člen
Avatar
Odpovídá na Peter Mlich
Lukáš U:12.2.2019 10:53

díky, ale asi to úplně není řešení, které jsem hledal :-D

 
Nahoru Odpovědět
12.2.2019 10:53
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.2.2019 11:05

Obavam se, ze mimo ty 2 zpusoby, neni dalsi, jak pracovat s globalni promenou mimo funkci. Bud ji funkci predas a nebo tam mas global. A je mozne, ze to mam ze starych stranek, stary python. Ze se ani to 'global' tam nemusi psat.
Ale necham se prekvapit, treba nekdo s necim prijde :)

Editováno 12.2.2019 11:08
 
Nahoru Odpovědět
12.2.2019 11:05
Avatar
možná zítra:17.6.2019 11:54

Zkus použít třeba slovník.
příklad:

hrac =  {
  "utok": 15,
  "obrana": 10,
  "zivoty": 100
}

print(hrac)

print(hrac["utok"])

Nebo se podívej tady na OOP (objektové programování) vytvoříš třídu, kde budeš mít jak proměnné, tak funkce pro práci s proměnnými.

Editováno 17.6.2019 11:55
 
Nahoru Odpovědět
17.6.2019 11:54
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:17.6.2019 12:25

Chybu ti to vyhodí preto, že každá premenná má svoj tzv. scope. Niečo ako životný priestor, v rámci ktorého táto premenná existuje a dokážeme s ňou v programe pracovať. Ako ale program pokračuje a dostane sa postupne von z toho scopu, tak premenná stráca svoju platnosť, zaniká, nie je prístupná, čáry máry fuč.

def foo():
    prem = "foo"
    print("Fungujem: ", prem)
    if True:
        print("Aj tu fungujem: ", prem)
        druhaPrem = "bar"
        print("Fungujem: ", druhaPrem)

    print("Vyhodím chybu: ", druhaPrem)

print("Vyhodím chybu: ", prem)

Pokiaľ chceš mať zatiaľ oddelenú premennú na všetko, môžeš to spraviť takto:

bar = "bar"

def foo():
    global bar
    bar = "foo"

foo()
print("Vypíše foo: ", bar)

Pogoogli a pohraj sa s tým, aby si sám zistil, ako to zhruba funguje.

Odporúčam ti ale použiť skôr slovníky, ako ti napísal možná zítra a postupne prejsť na objekty.

Nahoru Odpovědět
17.6.2019 12:25
if (this.motto == "") { throw new NotImplementedException(); }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.