Как сократить количество переменных в программе?
Я новичок, и написал небольшую программку на 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 шт):
Ну как первое, можно сделать запись названий и годов через 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('неверно')