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