Форум сайта python.su
# Викторина #Игра на выбор правильного варианта ответа. # вопросы которой читаются из текстового файла import sys def open_file(file_name, mode): """Открывает файл.""" try: the_file = open(file_name, mode, encoding='utf-8') except IOError as е: print("Невозможно открыть файл",file_name," Работа программы будет завершена.\n", е) input("\n\nHaжмитe 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] explanation = next_line(the_file) return category, question, answers, correct, explanation def welcome(title): """Приветствует игрока и сообщает тему игры.""" print("\t\tДoбpo пожаловать в игру 'Викторина' !\n") print("\t\t", title, "\n") def main(): trivia_file = open_file("trivia.txt", "r") title = next_line(trivia_file) welcome(title) score=0 # извлечение первого блока category, question, answers, correct, explanation = next_block(trivia_file) while category: # вывод вопроса на экран print(category) print(question) for i in range(4): print("\t", i + 1, " ", ar1swers[i]) # получение ответа answer = input("Baш ответ: ") # проверка ответа if answer == correct: print("\nДa!", end=" ") score += 1 else: print("\nHeт.", end=" ") print(explanation) print("Cчeт:", score, "\n\n") # переход к следующему вопросу category, question, answers, correct, explanation = next_block(trivia_file) trivia_file.close() print("Этo был последний вопрос!") print("Ha вашем счету", score) main() input("\n\nHaжмитe Enter. чтобы выйти.")[code python][/code]
Отредактировано Ne_znay_ka (Март 24, 2022 10:16:02)
Прикреплённый файлы:
trivia.txt (1,0 KБ)
Офлайн
[code python]между этими тегами вставлять код[/code]
Отредактировано xam1816 (Март 24, 2022 10:14:42)
Офлайн
Ne_znay_kaПотому что имя trivia_file находится внутри функции main(), а код, который обращается к имени trivia_file , находится снаружи функции main(). Занеси его в функцию main() через отступ.
почему не определяет name ‘trivia_file’
Офлайн
py.user.nextне могу понять(( тяжко
Офлайн
Офлайн
Ne_znay_kaexcept IOError as е:
Ne_znay_kaВ этих строках ещё букву е русскую замени на букву e английскую. Лучше пиши exc вместо e.print("Невозможно открыть файл",file_name," Работа программы будет завершена.\n", е)
Отредактировано py.user.next (Март 24, 2022 23:24:30)
Офлайн
py.user.nextспасибо заработало но теперь запустился БЕСКОНЕЧНЫЙ ЦИКЛ
# Викторина #Игра на выбор правильного варианта ответа. # вопросы которой читаются из текстового файла import sys def open_file(file_name, mode): """Открывает файл.""" try: the_file = open(file_name, mode, encoding='utf-8') except IOError as exc: print("Невозможно открыть файл", file_name, " Работа программы будет завершена.\n", exc) input("\n\nHaжмитe 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] explanation = next_line(the_file) return category, question, answers, correct, explanation def welcome(title): """Приветствует игрока и сообщает тему игры.""" print("\t\tДoбpo пожаловать в игру 'Викторина' !\n") print("\t\t", title, "\n") def main(): trivia_file = open_file("trivia.txt", "r") title = next_line(trivia_file) welcome(title) score=0 # извлечение первого блока category, question, answers, correct, explanation = next_block(trivia_file) while category: # вывод вопроса на экран print(category) print(question) for i in range(4): print("\t", i + 1, " ", ar1swers[i]) # получение ответа answer = input("Baш ответ: ") # проверка ответа if answer == correct: print("\nДa!", end=" ") score += 1 else: print("\nHeт.", end=" ") print(explanation) print("Cчeт:", score, "\n\n") # переход к следующему вопросу category, question, answers, correct, explanation = next_block(trivia_file) trivia_file.close() print("Этo был последний вопрос!") print("Ha вашем счету", score) main() input("\n\nHaжмитe Enter. чтобы выйти.")
Отредактировано Ne_znay_ka (Март 25, 2022 11:47:30)
Офлайн
Ne_znay_kaЕщё раз скачай исходник, который я отправлял. Там никакого бесконечного цикла нет, потому что я это всё исправил и проверил. А ты выкладываешь какой-то свой код подредактированный. Исправить тебе надо только вот эту букву “е” с русской на английскую “e”.
спасибо заработало но теперь запустился БЕСКОНЕЧНЫЙ ЦИКЛ
Отредактировано py.user.next (Март 25, 2022 22:59:09)
Офлайн
py.user.nextспасибо
Офлайн