Создание списка со значениями 001000 - 999999
Как создать список с номера 001000 до 999999. Я пытался создавать при помощи range:
x = (for i in range(1000, 1000000)
Но я не понимаю, каким образом сделать так, чтобы перед значением "1000" вставить 2 ноля, чтобы было значение "001000" Именно чтобы каждый номер был бы 6-ти значным.
Ответы (2 шт):
Для заполнения слева 0 можно использовать функцию строки zfill:
items = [f'{i}'.zfill(6) for i in range(1000, 1000000)]
print(items[:10])
# ['001000', '001001', '001002', '001003', '001004', '001005', '001006', '001007', '001008', '001009']
Либо использовать форматирование, указав с какой стороны заполнять, каким символом и до какой длины:
items = [f'{i:>06}' for i in range(1000, 1000000)]
Как это часто бывает, исходная задача совсем другая и не требует ответа на вопрос, который был задан.
Итак, задача:
Подсчитать % счастливых шестизначных трамвайных билетиков. Билет является счастливым, если сумма его первых трёх цифр равна сумме последних трёх цифр. Например, 109208 и 334505 - счастливые, 123456 - нет. Номера билетиков лежат в диапазоне 001000 до 999999. Ответ написать с точностью до 1 знака после запятой, вида: "Процент счастливых билетиков 2.1%".
Для этого надо просто подсчитать сумму 3 младших цифр числа (для этого взять остаток от деления числа на 1000) и 3 старших цифр числа (для этого поделить число на 1000 чтобы использовать ту же функцию).
def summ3(number):
d1 = number % 10 # младшая цифра из трёх
d2 = number // 10 % 10 # средняя цифра из трёх
d3 = number // 100 % 10 # старшая цифра из трёх
return d1 + d2 + d3
lucky_counter = 0
for i in range(1000, 1000000):
if summ3(i % 1000) == summ3(i // 1000):
lucky_counter += 1
lucky_proc = lucky_counter * 100 / (1000000 - 1000)
print("Всего билетов:", 1000000 - 1000)
print(f"Счастливых билетов: {lucky_counter} штук, {lucky_proc:.1f}%" )
Вывод:
Всего билетов: 999000
Счастливых билетов: 55251 штук, 5.5%
Ну и альтернативные варианты подсчёта суммы цифр числа:
# универсальный вариант подсчёта суммы цифр любого числа
def summ3(number):
s = 0
while number:
s += number % 10
number //= 10
return s
# вариант используя функцию sum() с разбивкой числа на цифры через строку
def summ3(number):
return sum(map(int, str(number)))