Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2022 10:13:27

Ne_znay_ka
Зарегистрирован: 2022-01-06
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

 # Викторина 
#Игра на выбор правильного варианта ответа. 
# вопросы которой читаются из текстового файла 
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)

Прикреплённый файлы:
attachment trivia.txt (1,0 KБ)

Офлайн

#2 Март 24, 2022 10:14:10

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

[code python]между этими тегами вставлять код[/code]

Отредактировано xam1816 (Март 24, 2022 10:14:42)

Офлайн

#3 Март 24, 2022 12:46:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

Ne_znay_ka
почему не определяет name ‘trivia_file’
Потому что имя trivia_file находится внутри функции main(), а код, который обращается к имени trivia_file , находится снаружи функции main(). Занеси его в функцию main() через отступ.



Офлайн

#4 Март 24, 2022 20:50:32

Ne_znay_ka
Зарегистрирован: 2022-01-06
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо


py.user.next
не могу понять(( тяжко

Офлайн

#5 Март 24, 2022 23:20:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

Тут я поправил код, всё запускается и не выпадает.



Прикреплённый файлы:
attachment vict.tar.gz (1,9 KБ)

Офлайн

#6 Март 24, 2022 23:24:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

Ne_znay_ka
  
except IOError as е:
Ne_znay_ka
  
print("Невозможно открыть файл",file_name," Работа программы будет завершена.\n", е)
В этих строках ещё букву е русскую замени на букву e английскую. Лучше пиши exc вместо e.



Отредактировано py.user.next (Март 24, 2022 23:24:30)

Офлайн

#7 Март 25, 2022 11:47:11

Ne_znay_ka
Зарегистрирован: 2022-01-06
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

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)

Офлайн

#8 Март 25, 2022 22:57:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

Ne_znay_ka
спасибо заработало но теперь запустился БЕСКОНЕЧНЫЙ ЦИКЛ
Ещё раз скачай исходник, который я отправлял. Там никакого бесконечного цикла нет, потому что я это всё исправил и проверил. А ты выкладываешь какой-то свой код подредактированный. Исправить тебе надо только вот эту букву “е” с русской на английскую “e”.



Отредактировано py.user.next (Март 25, 2022 22:59:09)

Офлайн

#9 Март 26, 2022 10:07:03

Ne_znay_ka
Зарегистрирован: 2022-01-06
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

почему не определяет name 'trivia_file' заранее спасибо

py.user.next
спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version