Найти - Пользователи
Полная версия: почему не определяет name 'trivia_file' заранее спасибо
Начало » Python для новичков » почему не определяет name 'trivia_file' заранее спасибо
1
Ne_znay_ka
 # Викторина 
#Игра на выбор правильного варианта ответа. 
# вопросы которой читаются из текстового файла 
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]
xam1816
[code python]между этими тегами вставлять код[/code]
py.user.next
Ne_znay_ka
почему не определяет name ‘trivia_file’
Потому что имя trivia_file находится внутри функции main(), а код, который обращается к имени trivia_file , находится снаружи функции main(). Занеси его в функцию main() через отступ.
Ne_znay_ka

py.user.next
не могу понять(( тяжко
py.user.next
Тут я поправил код, всё запускается и не выпадает.
py.user.next
Ne_znay_ka
  
except IOError as е:
Ne_znay_ka
  
print("Невозможно открыть файл",file_name," Работа программы будет завершена.\n", е)
В этих строках ещё букву е русскую замени на букву e английскую. Лучше пиши exc вместо e.
Ne_znay_ka
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. чтобы выйти.")
py.user.next
Ne_znay_ka
спасибо заработало но теперь запустился БЕСКОНЕЧНЫЙ ЦИКЛ
Ещё раз скачай исходник, который я отправлял. Там никакого бесконечного цикла нет, потому что я это всё исправил и проверил. А ты выкладываешь какой-то свой код подредактированный. Исправить тебе надо только вот эту букву “е” с русской на английскую “e”.
Ne_znay_ka
py.user.next
спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB