Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Аналог goto в Python

preispolnennyy Знаток (289), закрыт 5 месяцев назад
Пишу программу "тест", и нужно делать так чтобы если номер вопроса повторяется(выбирается он через random), то номер вопроса подбирался заново, через while сделать не вариант. Сначала хотел сделать через метку, но вспомнил что код я пишу на Pythone и такого в нем нет. Долго ломал голову, в итоге как-то по-другому сделать не вариант, либо я просто не додумываюсь. Есть ли какие-то варианты заменить goto или сделать программу по другому? Этот кусок кода вышел в 30 строчек и переписывать не хочу, надо было додумывать это сразу. Буду очень признателен за помощь
Лучший ответ
Андрей Высший разум (478724) 7 месяцев назад
НЕ НАДО выбирать номер вопроса через random. Надо взять массив (в терминах Python - список) с теми номерами вопросов, из которых необходимо выбирать, и перемешать его функцией random.shuffle. А потом последовательно брать из этого массива очередное значение. Это гарантирует и случайный выбор вопросов, и отсутствие повторов вопросов.
preispolnennyyЗнаток (289) 7 месяцев назад
дело в том, что у меня есть классификация элементов, всего классов 7, соответственно 7 списков. поместить все элементы из всех классов в один список не вариант, в будущем принесет еще больше гемора с присвоением класса каждому элементу ведь всего их 32. тест как раз таки в том чтобы назначить класс. своим методом правильный ответ с самого начала определяется кодом
preispolnennyy, ты просто нахватался где-то дурных подходов к программированию и вместо изучения нормальных пытаешься эту дурнину протащить в язык. Хочешь goto - используй Бейсик или Фортран.
Остальные ответы
vseznaechka Мыслитель (7837) 7 месяцев назад
В Python нет прямого аналога goto, и это не случайно. goto часто приводит к запутанному и сложному коду, который трудно читать и отлаживать.

Однако, в твоем случае вместо goto можно использовать цикл while в комбинации с условным оператором if.

Вот пример:
 import random 

def ask_question(question, answer):
"""Задает вопрос и проверяет ответ."""
print(question)
user_answer = input("Ответ: ")
if user_answer == answer:
print("Верно!")
else:
print("Неверно.")

questions = {
1: ("Какой язык программирования самый популярный?", "Python"),
2: ("Какая столица Франции?", "Париж"),
3: ("Что такое HTML?", "Язык разметки"),
}

used_questions = set()

while len(used_questions) < len(questions):
question_number = random.choice(list(questions.keys()))
if question_number not in used_questions:
used_questions.add(question_number)
ask_question(*questions[question_number])
else:
continue

print("Тест завершен!")
preispolnennyyЗнаток (289) 7 месяцев назад
это все очень круто, но я и сам бы мог задать вопрос чатугпт, не для этого я сюда писал
Похожие вопросы