Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 03.05.2020
Сообщений: 5

Майкл Доусон. Глава 7. Викторина

27.07.2020, 09:49. Показов 4112. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте. Недавно программирую. Начал с книги Майкла Доусона.
Возникла проблема с доработкой программы

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#Booch 22.07.2020
#Викторина
#Работает посредствам работы с файлами
 
import sys
def open_file(file_name,mode):
    """Открывает файл"""
    try:
        the_file = open(file_name,mode,encoding = "utf-8")
    except IOError as e:
        print("Невозможно открыть файл",file_name,", программа будет\
                остановлена.\n",e)
        input("\nНажмите enter, чтобы выйти")
        sys.exit()
    else:
        return the_file
 
def next_line(the_file):
    """Возвращает отформатированную очередную строку игрового файла"""
    line = the_file.readline()
    line = line.replace("/","\n")
    return line
 
def next_block(the_file):
    """Возвращает очередной блок данных из игрового файла"""
    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]
    scores = int(next_line(the_file))
    explanation = next_line(the_file)
    return category, question, answers, correct, explanation, scores
 
def welcome(title):
    """Приветствие и тема игры"""
    print("\t\tДобро пожаловать в игру \"Викторина\"!\n")
    print("\t\t",title,"\n")
 
def main():
    trivia_file = open_file("trivia.txt","r")
    title = next_line(trivia_file)
    welcome(title)
    score = 0
    scores = 0
    #извлечение первого блока
    category, question, answers, correct, explanation, scores = next_block(trivia_file)
    while category:
        #вывод вопроса на экран
        print(category)
        print(question)
        for i in range(4):
            print("\t",i+1,"-",answers[i])
        #получение ответа
        answer = input("Ваш ответ: ")
 
        if answer == correct:
            print("\nВерно!",end = "")
            print("Этот вопрос стоил:",scores)
            score += scores
        else:
            print("\nОчевидно, нет!",end = "")
        print(explanation)
        print("Счёт:", score,"\n\n")
 
 
        category,question,answers,correct,explanation,scores = next_block(trivia_file)
 
            
 
    trivia_file.close()
    print("Это все, отлично сыграли!")
    if score%10 == 1:
        print("У вас",score,"очко!")
    elif (score%10 == 2) or (score%10 == 3) or (score%10 == 4):
        print("У вас",score,"очка!")
    else:
        print("У вас",score,"очков!")
 
main()
input("Нажмите enter, чтобы выйти")
Вылетает ошибка:
Traceback (most recent call last):
File "C:\Users\Александр\Desktop\Программиров ание\Главы\7.Викторина.py", line 83, in <module>
main()
File "C:\Users\Александр\Desktop\Программиров ание\Главы\7.Викторина.py", line 70, in main
category,question,answers,correct,explan ation,scores = next_block(trivia_file)
File "C:\Users\Александр\Desktop\Программиров ание\Главы\7.Викторина.py", line 34, in next_block
scores = int(next_line(the_file))
ValueError: invalid literal for int() with base 10: ''

Я не могу понять в чем дело. Я понял суть ошибки, типо я пытаюсь преобразовать в int не число, но на самом деле, в файле стоит именно число. Помимо того, score выводится и считается правильно, а он зависит как раз от scores. В чем проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2020, 09:49
Ответы с готовыми решениями:

Майкл Доусон. Викторина
Всем привет. Изучаю Python по учебнику Доусона и столкнулся с проблемой: &quot;local variable 'explanation' referenced before assignment&quot;....

Игра анаграммы. Майкл Доусон "Программируем на Python". Глава 4
Добрый день! Задача: доработать игру &quot;Анаграммы&quot; из указанного учебника так, чтобы к каждому слову полагалась подсказка. Игрок должен...

Игра анаграммы. Майкл Доусон "Программируем на Python". Глава 9
Добрый день, друзья! Продолжаю решать задачи из этого учебника. Возник вопрос по 4ой задаче из этой главы: Создайте несложную...

5
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.07.2020, 10:54
Booch, ну во первых, выкинуть книгу, это точно. Глядя на этот код, у меня психика сдает.
Цитата Сообщение от Booch Посмотреть сообщение
Python
1
2
3
4
5
def next_line(the_file):
    """Возвращает отформатированную очередную строку игрового файла"""
    line = the_file.readline()
    line = line.replace("/","\n")
    return line
То есть если файл формата:
Code
1
2
3
4
It is category
It is answer?
0
...
То это функция вернет:
Code
1
2
3
"It is category\n"
"It is answer?\n"
"0\n"
Добавлено через 3 минуты
Открыть файл, и держать его открытым вообще беда. Открыл, прочитал, закрыл.

Добавлено через 12 минут
Пример:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
with open("data.txt", "rt") as file_handle:
    lines = file_handle.read().split("\n")
    for i in range(0, len(lines), 9):
        block = lines[i: i + 9]
        print(*block, sep="\n")
#Category 1
#Question 1?
#Answer 1.1
#Answer 1.2
#Answer 1.3
#Answer 1.4
#Answer 1.1
#Explanation 1
#1
#
 
with open("data.txt", "rt") as file_handle:
    lines = file_handle.readlines()
    for i in range(0, len(lines), 9):
        block = lines[i: i + 9]
        print(*block, sep="\n")
#Category 1\n
#Question 1?\n
#Answer 1.1\n
#Answer 1.2\n
#Answer 1.3\n
#Answer 1.4\n
#Answer 1.1\n
#Explanation 1\n
#1\n
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
27.07.2020, 11:00
Цитата Сообщение от DmFat Посмотреть сообщение
Открыть файл, и держать его открытым вообще беда. Открыл, прочитал, закрыл.
а если файл достаточно большой?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.07.2020, 12:15
ioprst, по мне так лучше пока он грузит файл, заставочку крутануть в потоке, чем держать файл открытым на долгое время. Может в каких то случаях это уместно(но точно не тут).

P.S. Я бы пропустил мимо, если бы не разделение на кучу функций в которых файл передается как аргумент.
0
0 / 0 / 0
Регистрация: 03.05.2020
Сообщений: 5
28.07.2020, 10:59  [ТС]
DmFat, В таком случае, что посоветуете для изучения языка?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
28.07.2020, 11:12
Плохо:
Python
1
(score%10 == 2) or (score%10 == 3) or (score%10 == 4)
Правильно:
Python
1
score % 10  in (2,3,4)
Читайте Лутца иначе не будете знать элементарных возможностей языка.
Цитата Сообщение от Booch Посмотреть сообщение
но на самом деле, в файле стоит именно число
Нужно дебажить код, чтобы не уверять себя и других, что вы все делаете правильно. Интерпретатор вам не врет - поэтому просто соглашайтесь с ним.
В next_line вы сами делаете какую-то странную замену, меняя шило на мыло, а потом удивляетесь что у вас не число.
Число с символом перевода строки уже не может быть трансформировано в int.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2020, 11:12
Помогаю со студенческими работами здесь

Игра "Зооферма". Майкл Доусон "Программируем на Python". Глава 8
Всем доброго времени суток! Задача: Напишите программу «Зооферма», в которой будет создано несколько объектов класса Critter, а...

Работа с файлами. (Майкл Доусон)
Всем привет. Столкнулся с маленькой проблемой. Изучаю книгу Майкла Доусона &quot;Программирование на Python&quot; Остановился на 7 главе. Там...

Какую книгу лучше читать после "Майкл Доусон.Программируем на Python"?
Какая книга подходит для прочтения новичком после &quot;Майкл Доусон.Программируем на Python&quot;?

Python М.Доусон
Вообщем, тут такое дело, изучаю Пайтон по Доусону и там есть задача с такими условиями : &quot;А вот задача посложнее. Напишите на...

Куплю книгу "Программируем на Python" Майкл Доусон
Санкт-Петербург; Программируем на Python (Python Programming for the Absolute Beginner) Майкл Доусон; Только на русском.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru