Создание списка со значениями 001000 - 999999

Как создать список с номера 001000 до 999999. Я пытался создавать при помощи range:

x = (for i in range(1000, 1000000)

Но я не понимаю, каким образом сделать так, чтобы перед значением "1000" вставить 2 ноля, чтобы было значение "001000" Именно чтобы каждый номер был бы 6-ти значным.


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

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

Для заполнения слева 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)]
→ Ссылка
Автор решения: GrAnd

Как это часто бывает, исходная задача совсем другая и не требует ответа на вопрос, который был задан.

Итак, задача:

Подсчитать % счастливых шестизначных трамвайных билетиков. Билет является счастливым, если сумма его первых трёх цифр равна сумме последних трёх цифр. Например, 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)))
→ Ссылка