Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Upokarzający problem - przypisanie wartości return funkcji do zmiennej  (Przeczytany 86 razy)
« : 13:04 14/06/19 »
Bartoszeg02 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Cześć,
To mój pierwszy post więc przede wszystkim chciałbym się ze wszystkimi przywitać!
Od niedawna zacząłem dłubać w pythonie. Przerobiłem jeden podręcznik który wpadł mi w ręce - oczywiście poczułem się mocny, więc w ramach utrwalania wiedzy zacząłem tworzyć coś swojego ... i już na samym początku pojawił się problem którego nie mogę zrozumieć...

Program ma działać tak, że posiadam postać z 4 współczynnikami (które sobie przechowuję jako słownik), otrzymuję kilka punktów które mogę rozdzielić między te cztery współczynniki. Wydawałoby się że prościzna ...

Kod prezentuje się następująco:
Cytuj
def show_stats(stats):
    print("Aktualne statystyki:")
    print(stats)

def choose_stat(attribute_points):
    global key
    character = ''
    while character not in ('0', '1', '2', '3', '4'):
        print("Aktualnie posiadasz", attribute_points, "punktów talentu.\nKtóry atrybut chcesz zmodyfikować?")
        character = input(
            """
            1 - siła
            2 - zręczność
            3 - inteligencja
            4 - charyzma
   
            0 - zakończ tworzenie postaci
            """
        )
    return character

def ending_screen(stats):
    print(stats)
    print("Ukończyłeś tworzenie swojego bohatera. Jego ostateczne atrybuty to:\n", stats)

stats = {
    'strength': 5,
    'agility': 5,
    'intelligence': 5,
    'charisma': 5
}
points = 6
key = ''

def main():
    while key != '0':
        show_stats(stats)
        key = choose_stat(points)
    ending_screen(stats)
    return


main()
input("Aby zakończyć działanie programu wcisnij Enter\n")

i na czym polega problem ... otóż gdy odpalam program otrzymuję błąd w linii którą zaznaczyłem na czerwono
UnboundLocalError: local variable 'key' referenced before assignment

i za chiny teraz nie mogę tej sytuacji zrozumieć bo nie raz i nie dwa przypisywałem zmienną do wyniku funkcji.
1. Na samym początku zadeklarowałem zmienną:
key = ''
2. uruchamiam program i wchodzę do pętli while gdzie warunek jest spełniony bo key nie równa się 0
3. Wywołuje się funkcja choose_stat w której pod zmienną character przypisywane jest to co wprowadziłem w ramach inputa.
4. Funkcja choose_stat wypluwa wynik który jest przypisywany do key i wracamy na początek pętli..

Jak to może nie działać !?
Bardzo chciałbym zrozumieć na czym polega tutaj błąd w moim rozumowaniu bo zdaje się
że jest on wręcz kardynalny.
Zapisane
« Odpowiedz #1 : 18:59 14/06/19 »
raydeal Offline
Expert Python User

Zobacz profil
****

Reputacja: 85
Wiadomości: 503


Python widzi key jako zmienną lokalną i o to się czepia.
Gdybyś nie miał tej linii w main()
Kod
key = choose_stat(points)
to by widział key którą przypisałeś przed definicją main() a w tym przypadku jako że masz przypisanie do zmiennej o takiej nazwie w main() to traktuje tą zmienną jako lokalną.
Przenieś key='' oraz points do main() przed pętle i będzie dobrze.
Zapisane
« Odpowiedz #2 : 07:55 15/06/19 »
Bartoszeg02 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Dzięki serdeczne !
O tym książka nie wspominała (albo ten akapit przeoczyłem) - teraz jest wszystko jasne!
w ramach podziękowania mogę jedynie podarować +1 do reputacji ! Uśmiech
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot