PHP týden Předvánoční slevová akce
Další šance dokončit svůj projekt a získat ceny v hodnotě 10.000 Kč! Pokračování úspěšné letní soutěže - ITnetwork winter
Využij předvánočních slev a získej od nás 20 % bodů navíc zdarma! Zároveň také probíhá PHP týden se slevou na e-learning až 80 %

Diskuze: Funkce-rada pro nováčka

Aktivity (2)
Avatar
Lukáš U
Člen
Avatar
Lukáš U:12. února 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. února 7:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. února 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. února 10:16
 
Nahoru Odpovědět
12. února 10:14
Avatar
Lukáš U
Člen
Avatar
Odpovídá na Peter Mlich
Lukáš U:12. února 10:53

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

 
Nahoru Odpovědět
12. února 10:53
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. února 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. února 11:08
 
Nahoru Odpovědět
12. února 11:05
Avatar
možná zítra:17. června 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. června 11:55
 
Nahoru Odpovědět
17. června 11:54
Avatar
Martin Petrovaj
Překladatel
Avatar
Martin Petrovaj:17. června 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. června 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.