Как суммировать 3 числа в списке из 6 элементов?

#python #python-3.x

Вопрос:

Например, у нас есть 6-значное число, и мы должны составить сумму из 2 его половинок (скажем, 123456, мы получаем 1 2 3 и 4 5 6). Вот программа, для которой я пытался ее написать :

 ticket = int(input("Input your ticket : ")) #ticket input
ticket_list = [int(i) for i in str(ticket)] #make a list
length = len(ticket_list)
mid = length//2
half1 = ticket_list[:mid] 
half2 = ticket_list[mid:] #split the list in two halves
def sum3digits1(mysum): #sum of 1st half
  mysum=0
  for i in range(half1):
    mysum =int(i)
  return mysum
def sum3digits2(suma): #sum of 2nd half
  suma=0
  for i in range(half2):
    suma =int(i)
  return suma
a = sum3digits1(ticket_list) 
b = sum3digits2(ticket_list)
print(a, b)
 

Тем не менее, это показывает, что моя программа получила ошибку, но я действительно не знаю, каким должно быть исправление. Я попытался использовать range() для суммы из 3 элементов, но это не очень хорошо сработало. Любая помощь будет оценена по достоинству!

Комментарии:

1. «это показывает, что моя программа получила ошибку» — что именно показывает «это»? Есть ли какое-либо сообщение об ошибке?

2. В нем говорится, что список не может быть интерпретирован как целое число. Поэтому я бы предположил, что в этом случае я не использую метод range ()?

3. Да, range(half_which_is_a_list) в этом-то и проблема. Вы можете выполнить итерацию half напрямую, например for i in half1: ...

4. О-о-о, теперь это имеет смысл. Спасибо!

Ответ №1:

Поскольку у вас уже есть примеры, которые должны сработать, я просто добавлю объяснение: функция range() даст вам все числа между двумя числами. (взгляните на https://www.w3schools.com/python/ref_func_range.asp) если вы дадите ему только один аргумент, он будет начинаться с 0 и попытается дать вам каждое число (в стандартном интервале, равном единице, если вы не укажете иначе) до числа, которое вы ему дали (но не это). Но вы дали ему список номеров вместо ожидаемого числа.

Также в качестве предложения могу я предложить вам не повторять себя в коде: например, sum3digits1 и sum3digits2-это одна и та же функция, поэтому вы можете просто назвать ее sum3digits или, возможно, даже sum_digits и повторно использовать ее.: -)

Комментарии:

1. Спасибо, что прояснили это, теперь я вроде как понимаю это больше

Ответ №2:

Попробуйте это:

 def sum_half(lst):
    return sum(lst[:len(lst)//2]), sum(lst[len(lst)//2:])
 

Выход:

 >>> ticket_list = [1,2,3,4,5,6]
>>> sum_half(ticket_list)
(6, 15)
 

Комментарии:

1. Эта сумма сработала! Спасибо!