Witam szanownych forumowiczów,
jakiś czas temu postanowiłem rozpocząć swoją przygodę z językiem python, aktualnie przerabiam książkę "Python dla każdego. Podstawy programowania", wyd. III. Dotychczas wykonałem wszystkie zadania z wyjątkiem jednego, które jak zauważyłem wymaga użycia algorytmu minmax i które tymczasowo odłożyłem, ale dziś nie o tym. W rozdziale 7, traktującym o plikach i wyjątkach znajduje się "Gra turniej wiedzy". W zamkniętym temacie archiwum znajduje się nawet pytanie na temat dokładnie tej gry, ja jednak chciałem zadać inne (być może banalne), ponieważ nie potrafię zrozumieć dwóch linijek znajdujący się w funkcji next_block (taki przykładowy blok z pliku.txt wkleiłem na samym dole):
** if correct:
correct = correct[0]**
Myślę sobie - przecież poprawna odpowiedź jest tutaj albo łańcuchem znaków (jeżeli dobrze rozumiem) pobieranym z pliku kwiz.txt, a zatem correct[0] to będzie w tym wypadku po prostu pierwsza litera poprawnej odpowiedzi. A jeżeli nie i correct to liczba (nr odpowiedzi wpisywany przez użytkownika) - to w ogóle wyskakuje błąd "TypeError: 'int' object is not subscriptable" - co wyszło mi z interpretatora online. Spróbowałem wykasować te dwie linijki, ale wtedy program jakąkolwiek odpowiedź użytkownika odczytuje jako złą. Spróbowałem zmienić liczbę w nawiasach kwadratowych na 1 czy 2 - podobnie. Jak krok po kroku rozumieć funkcję tych dwóch linijek kodu w całym programie?
Z góry proszę o wyrozumiałość i przepraszam za zawracanie głowy, zazwyczaj gdy program myśli szybciej ode mnie staram się korzystać ze strony pythontutor.com, która rozpakowuje wszystko krok po kroku, ale nie każdy rodzaj kodu da się tam sprawdzić :-)
> # 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')
Odcinek nie do odrzucenia
Plany na resztę życia
Za działalność mafijną skazano Cię na "kopę lat z hakiem" w więzieniu. /To oznacza, że za kratkami spędzisz:
co najmniej 15 lat
co najmniej 25 lat
co najmniej 50 lat
co najmniej 60 lat
4
Kopa to sześćdziesiąt sztuk.