Как сократить количество переменных в программе?

Я новичок, и написал небольшую программку на python, для зачета по датам истории, можно ли как-нибудь сократить количество переменных, чтобы не приходилось все записывать по отдельности как это написано в моем коде?

import random

colvo = int(input('введите количество дат от 1 до 2 ')) #я собираюсь сделать более большое количество

num = random.randint(1, colvo)
num2 = random.randint(1, colvo)

if colvo == 1:
    ask = str(input('введите название даты '))
    age = int(input('введите год '))
    while True:
        print(ask)
        otvet = int(input('введите ответ '))
        if otvet == age:
            print('верно')
        elif otvet != age:
            print('неверно')
            print ('верный ответ')
            print(age)



if colvo == 2:
    ask1 = str(input('введите 1ое название даты '))
    age1 = int(input('введите 1ый год '))
    ask2 = str(input('введите 2ое название даты '))
    age2 = int(input('введите 2ой год '))
    while True:
        num2 = random.randint(1, colvo)
        if num2 == 1:
            print(ask1)
            otvet2 = int(input('введите ответ '))
            if otvet2 == age1:
                print('верно')
            elif otvet2 != age1:
                print('неверно')
                print('верный ответ')
                print(age1)
        if num2 == 2:
            print(ask2)
            otvet3 = int(input('введите ответ'))
            if otvet3 == age2:
                print('верно')
            elif otvet3 != age2:
                print('неверно')
                print ('верный ответ')
                print(age2)

Ответы (1 шт):

Автор решения: Kalaps

Ну как первое, можно сделать запись названий и годов через hash (словарь) и цикл for. А для удобного понимания, как скоро уже можно перестать вписывать даты и названия использовать форматирование

asks = {}
for i in range(colvo):
    ask = str(input(f'введите название {i + 1}-ой даты: '))
    asks[ask] = int(input(f'введите год {i + 1}-ой даты: '))

Пояснение: форматирование строк позволяет добавлять в строки значения переменных, не уродуя код. Словари - это такие объекты, из которых, если ввести запрос, можно получить ответ или же наоборот, изменить ответ. Цикл for - это цикл, который идет последовательно по списку, а функция range создает такой список, который идет с 0 до указанного числа

Итак, далее нам нужно создать цикл while чтобы безостановочно получать вопросы и писать ответы. А также функция random.choice, за счет которой мы будем получать рандомные вопросы на каждой итерации.

while True:
    num = random.choice(list(asks)) # Получаем рандомный вопрос из asks
    print(num) # Пишем вопрос
    otvet = int(input('введите год:'))
    if otvet == asks[num]: # Проверяем, правильный ли ответ, посылая запрос словарю
        print('верно')
    else:
        print('неверно')

Пояснение: random.choice принимает на вход массив. Мы же получаем массив вопросов из asks за счет функции list

Полный код, чтобы быстро скопипастить:

import random

colvo = int(input('введите количество дат: '))

asks = {}
for i in range(colvo):
    ask = str(input(f'Введите название {i + 1}-ой даты'))
    asks[ask] = int(input(f'Введите год {i + 1}-ой даты'))

while True:
    num = random.choice(list(asks))
    print(num)
    otvet = int(input('введите год'))
    if otvet == asks[num]:
        print('верно')
    else:
        print('неверно')
→ Ссылка