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