Задать вопрос
@AnnoyingWolf

Как можно сократить код Python?

Создал вот такую программку и сразу задался вопросом, как можно уменьшить такое количество операторов elif или вложить их в друг-друга, потому что когда я вкладываю функции elif в if или if в elif, то выполнение команд просто игнорируется.

Код:
a = -1
b = 1
c = 0
Try = 'Попробуйте снова...'
run = True
print('Сколько будет 3+4-4*2, 9%4 и ~-1')
while run:
	answer1 = int(input('Введите первое число:'))
	answer2 = int(input('Введите второе число:'))
	answer3 = int(input('Введите третье число:'))
	if answer1 == a and answer2 == b and answer3 == c:
		print('Поздравляю,вы ответили верно')
		run = False
	elif answer1 == a and answer2 == b:
		print('Вы ответили верно на 1 и 2 вопрос')
		print(Try)
	elif answer2 == b and answer3 == c:
		print('Вы ответили верно на 2 и 3 вопрос')
		print(Try)
	elif answer1 == a and answer3 == c:
		print('Вы ответили верно на 1 и 3 вопрос')
		print(Try)
	elif answer1 == a:
		print('Вы ответили верно лишь на 1-й вопрос')
		print(Try)
	elif answer2 == b:			
		print('Вы ответили верно лишь на 2-й вопрос')
		print(Try)
	elif answer3 == c:
		print('Вы ответили верно лишь на 3-й вопрос')
		print(Try)	
	else:
		print('Вы ответили не верно')		
		print(Try)
print('Хорошая работа!!!')
input('Нажмите ENTER чтобы завершить')
  • Вопрос задан
  • 571 просмотр
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
right_answers = [-1, 1, 0]

print('Сколько будет 3+4-4*2, 9%4 и ~-1?')
while True:
    user_answers = (int(input('Введите {} число:'.format(i))) for i in ('первое', 'второе', 'третье'))
    equalities = [a == b for a, b in zip(right_answers, user_answers)]
    if all(equalities):
        print('Поздравляю, вы ответили верно!')
        break
    else:
        if sum(equalities):
            nums = ', '.join('{}-й'.format(n) for n, i in enumerate(equalities, start=1) if i)
            print('Вы ответили верно на {} вопрос'.format(nums))
        else:
            print('Вы ответили не верно')
    print('Попробуйте снова...')

print('Хорошая работа!!!')
input('Нажмите ENTER чтобы завершить')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽