Вывести количество и сами числа, у которых сумма первых трёх цифр равна сумме последних трех цифр

На вход моей программы подаётся количество чисел, а потом сами числа.

Необходимо вывести количество и сами числа, у которых сумма первых трёх цифр равна сумме последних 3 цифр.

Мой код к сожалению выводит, только последнее такое число.

sum1 = 0
sum2 = 0
n = int(input())
count = 0
for i in range(n):
    ticket = str(input())
    sum1 = int(ticket[0]) + int(ticket[1]) + int(ticket[2])
    sum2 = int(ticket[3]) + int(ticket[4]) + int(ticket[5])
    if sum1 == sum2:
        count += 1
    print(ticket,count)

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

Автор решения: S. Nick

Попробуйте так:

_dict = {}

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

for i in range(n):
    ticket = str(input(f'Введите {i}-e чисело: '))

    if len(ticket) >= 3 and \
       sum(map(int, ticket[0:3])) == sum(map(int, ticket[-3:])):
       
        if _dict.get(ticket):
            _dict[ticket] = _dict[ticket] + 1
        else: 
            _dict[ticket] = 1        
        
print(_dict)
→ Ссылка
Автор решения: handowl

Вариант первый, похож на ваш:


sum1 = 0
sum2 = 0
count = 0
tickets = list()

for i in range(int(input('Enter the amount of numbers: '))):
    ticket = input('Enter the next number: ')
    try:
        sum1 = int(ticket[0]) + int(ticket[1]) + int(ticket[2])
        sum2 = int(ticket[-1]) + int(ticket[-2]) + int(ticket[-3])
        if sum1 == sum2:
            count += 1
            print(ticket)
    except:
        pass
print(count)

Вариант второй:

def check_if_eq(string):
    is_equal = sum(map(int, string[:3])) == sum(map(int, string[-3:]))
    return len(string) >= 3 and is_equal

tickets = list()

for i in range(int(input('Enter the amount of numbers: '))):
    tickets.append(input('Enter the next number: '))

appropriate_tickets = [ticket for ticket in tickets if check_fnc(ticket)]

print(f'Count: {len(appropriate_tickets)}')
[print(ticket) for ticket in appropriate_tickets]

Вариант второй, просто есть ламбды:

tickets = list()

map_fnc = lambda string: sum(map(int, string))
check_fnc = lambda ticket: map_fnc(ticket[:3]) == map_fnc(ticket[-3:]) and len(ticket) >= 3

for i in range(int(input('Enter the amount of numbers: '))):
    tickets.append(input('Enter the next number: '))

appropriate_tickets = [ticket for ticket in tickets if check_fnc(ticket)]

print(f'Count: {len(appropriate_tickets)}')
[print(ticket) for ticket in appropriate_tickets]
→ Ссылка
Автор решения: TigerTV.ru

Можно сначала ввести список чисел, а потом его обработать filter:

# input numbers
n = int(input("N: "))
numbers = [input("Next number: ") for _ in range(n)]
print(numbers)
# filter
res = list(filter(lambda x: len(x) > 2 and sum(map(ord, x[:3])) == sum(map(ord, x[-3:])), numbers))
print(len(res))
print(res)
→ Ссылка
Автор решения: AEvlampev

Можно сделать так

count = 0
s1 = 0
s2 = 0
l_of_n = list()
for i in range(int(input())):
    number = input()
    for j in range(3):
        s1 += int(number[j])
        s2 += int(number[j + 3])
    if s1 == s2:
        count += 1
        l_of_n.append(number)
    s1 = 0
    s2 = 0
print(count, *l_of_n)
→ Ссылка