Funkcje w python - prośba o wyjaśnieie

0

Witam wszystkich,

Ucze się pythona hobbistycznie, obecnie przerabiam ksiązkę Python dla każdego wydanie III. Wszystko szło gładko do momentu trochę bardziej rozbudowanych programów. Analizując dokładnie kod linijka po linijce nie do końca rozumiem przekazywanie argumentów w funkcjach. Przykładowo mam taki kod:

# gra turniej wiedzy
# gra sprawdza wiedze ogolna ,odczytuje dane z pliku tekstowego

import sys

def open_file(file_name, mode):
    try:
        the_file = open(file_name, mode)
    except IOError as e:
        print('Nie można otworzyć pliku', file_name, 'Program zostanie zakończony.\n',e)
        input('\n\nAby zakończyć program, nasićnij dowolny klawisz')
        sys.exit()
    else:
        return the_file

def next_line(the_file):
    #Zwraca kolejny wiersz pliku
    line = the_file.readline()
    line = line.replace('/', '\n')
    return line

def next_block(the_file):
    #zwraca kolejny blok danych z pliku kwiz
    category = next_line(the_file)
    
    question = next_line(the_file)

    answers =[]
    for i in range(4):
        answers.append(next_line(the_file))

    correct = next_line(the_file)
    if correct:
        correct = correct[0]

    explanation = next_line(the_file)

    return category, question, answers, correct, explanation

def welcome(title):
    print('\t\t Witaj w turnieju wiedzy!\n')
    print('\t\t', title, '\n')

def main():
    trivia_file = open_file('kwiz.txt', 'r')
    title = next_line(trivia_file)
    welcome(title)
    score = 0

    #Pobiera pierwszy blok
    category, question, answers, correct, explanation = next_block(trivia_file)
    while category: #zadaje pytanie
        print(category)
        print(question)
        for i in range(4):
            print('\t', i + 1, '-', answers[i])
        answer = input('Jaka jest Twoja odpowiedź?: ') # Pobiera odpowiedź gracza
        if answer == correct:
            print('\nOdpowiedź prawidłowa!', end=' ')
            score += 1
        else:
            print('\nOdpowiedź niepoprawna', end=' ')
            print(explanation)
            print('Wynik:', score, '\n\n')

            category, question, answers, correct, explanation = next_block(trivia_file)

    trivia_file.close()
    print('To bylo ostatnie pytanie')
    print('Twoj końcowy wynik wynosi', score)

main()
input('Aby zakończyć wciśnij ENTER')

    

Definicje open_file oraz next_line, w definicji next_line argumentem jest the_file , dlaczego?
the_file jest zmienną wewnątrz funkcji open_file, dlaczego to działa?
Próbuje sobie jakoś to wytłumaczyć ale nie chcę sam siebie wprowadzać w błąd dlatego byłbym wdzięczny za pomoc

1

Każda funkcja ma swój zestaw zmiennych (lokalnych -- są jeszcze globalne, ale ich lepiej nie używać w ogóle), więc the_file w funkcji open_file oraz the_file w funkcji next_line to dwie różne zmienne, całkiem od siebie niezależne. Tłumaczyć dalej? :)

1

W definicji funkcji możesz zadeklarować dowolne argumenty, file, my_dogs_name, my_death_date itp i następnie operować na nich. Za to żeby odpowiednia rzecz trafiła na swoje miejsce odpowiada wywołanie funkcji, gdzie przekazujesz rzeczywiste wartości, u Ciebie jest to:

trivia_file = open_file('kwiz.txt', 'r')
title = next_line(trivia_file)
0

Dzięki wielkie, to była moja pierwsza myśl ale potem niestety zacząłem kombinować, myślałem że one są jakimś cudem ze sobą powiązane. Tak długo wpatrywałem się w te dwie funkcję że nie zauważyłem że odpowiedź na moje pytanie jest w funkcji main(). Teraz z czystym sumieniem mogę przejść do następnego działu

1 użytkowników online, w tym zalogowanych: 0, gości: 1