2016-12-01 5 views
1

Я пытаюсь написать функцию sum_of_squares (xs), которая вычисляет сумму квадратов чисел в списке xs. Например, sum_of_squares ([2, 3, 4]) должен возвращать 4 + 9 + 16, который 29:Функция, которая вычисляет сумму квадратов чисел в списке

Вот что я пробовал:

import random 

xs = [] 

#create three random numbers between 0 and 50 

for i in range(3): 
    xs.append(random.randint(0,50)) 

def sum_of_squares(xs): 

#square the numbers in the list 

    squared = i ** i 

#add together the squared numbers 

    sum_of_squares = squared + squared + squared 

    return sum_of_squares 

print (sum_of_squares(xs)) 

Сейчас это всегда печатает

12 

Потому что он принимает i как число целых чисел в списке, а не целое число. Как я могу сказать «умножить значение на целое число» на столько целых чисел в списке, чтобы получить квадрат значений?

Задавать этот вопрос привел меня попробовать это:

import random 

xs = [] 

#create three random numbers between 0 and 50 

for i in range(3): 
    xs.append(random.randint(0,50)) 

def sum_of_squares(xs): 

#square the numbers in the list 

    for i in (xs): 
     squared = i ** i 

#add together the squared numbers 

     sum_of_squares = squared + squared + squared 

    return sum_of_squares 

print (sum_of_squares(xs)) 

Но это, кажется, не быть возведения в квадрат значения целых чисел правильно - я не уверен, что он делает. Смотрите этот скриншот See Screenshot профайла Visualize Python.

+1

'квадрат = я ** i' неправильно. Вы либо имеете в виду 'i * i', либо' i ** 2'. --- И 'i' даже должен быть видимым изнутри этой функции? Это глобальное целое число. – byxor

ответ

3

Вы делаете глупые ошибки. попробуйте это:

import random 
xs = [] 
for i in range(3): 
    xs.append(random.randint(0,50)) 

def sum_of_squares(xs): 
    sum_of_squares=0 #mistake 1 : initialize sum first. you are making new sum variable in loop everytime. 
    for i in (xs): 
     squared = i * i #mistake 2 : ** is exponent and not multiply. 
     sum_of_squares += squared #mistake 3 
    return sum_of_squares 

print (sum_of_squares(xs)) 
+0

Почему мы используем sum_of_squares = 0 для инициализации суммы? Вторая ошибка имеет смысл и легко фиксируется. Благодарю. – Sean

+1

то, что вы делали, - это объявление цикла sum_of_squares внутри цикла, поэтому на каждой итерации оно объявляло его свежим и вычисляемым, но вам нужна общая сумма, а не только последняя итерация. плюс ошибка № 3 была формулой добавления ниже ошибки № 2. –

+0

, так что если бы у нас были [13, 31, 20], он бы вернул sum_of_squares как 400? Ошибка №3 имеет смысл. – Sean

4
def sum_of_squares(xs): 
    return sum(x * x for x in xs) 
+3

Это решение довольно приятно. Я думаю, что это будет сложнее для понимания. – byxor

+0

согласен с брендом. подумайте в своем ответе, почему это лучший подход. –

1

Направо концепцию первой на бумаге.

  1. У вас есть список номеров.
  2. Вы должны разобрать список, сделать квадрат и сохранить его в некоторой переменной.

    import random 
    
    xs = [] 
    
    #create three random numbers between 0 and 50 
    
    for i in range(3): 
        xs.append(random.randint(0,50)) 
    
    def sum_of_squares(xs): 
        result = 0 
        for i in xs: 
         result += i*i 
    
        return result