2016-10-03 8 views
-4

Моя цель - умножить все положительные числа в списке на 3. Я думаю, что у меня почти есть решение, но я не уверен, что такое заставляя его не работать. В настоящее время она просто возвращается обратно оригинальные номера и не умножать любые числа на 3.Нужна помощь в умножении положительных чисел в списке на 3, и оставление других чисел немодифицировано

def triple_positives(xs): 
    List = [] 
    product = 3 
    for i in range (len(List)): 
     if List[i] >= 0: 
      product *= i 
     List.append(xs[i]) 
    return xs 

ответ

0

В вашем коде, есть несколько вопросов. Ниже приводится обновленная версия этого с исправлениями:

>>> def triple_positives(xs): 
...  List = [] 
...  product = 3 
...  for i in range (len(xs)): 
...   if xs[i] >= 0: 
...    List.append(xs[i]*3) 
...   else: 
...    List.append(xs[i]) 
...  return List 
... 
>>> my_list = [1, 2, -1, 5, -2] 
>>> triple_positives(my_list) 
[3, 6, -1, 15, -2] 

В качестве альтернативы, вы можете достичь этого, используя выражения списков как:

>>> [item * 3 if item > 0 else item for item in my_list] 
[3, 6, -1, 15, -2] 
+0

Спасибо, что вы по-прежнему не работаете, но ваше решение помогло мне разобраться, что мне нужно сделать. – user75747475

+0

Он должен работать. Я скопировал рабочий код с консоли. Проверьте, скопировали ли вы и вложили все, что я упомянул. –

+0

@ user75747475 Если с этим что-то не так, и вы уже знаете, что, тогда почему бы не сказать, что, поэтому его можно здесь исправить? –

0

Вы итерацию пустого списка, и что цикл будет пытаться получить доступ к элементам, которые не существуют, изменить product, и добавьте неизменные элементы из исходного списка в новый список. И тогда вы все равно возвращаете исходный, неизменный список. В принципе, почти каждая строка в коде неправильная.

Вы должны быть зацикливание по списку ввода и добавления умножали элементы в новый список, а затем вернуть новый список:

def triple_positives(xs): 
    List = [] 
    product = 3 
    for i in xs: 
     if i > 0: 
      List.append(i*product) 
    return List 

Кроме того, 0 не является положительным числом. Используйте > вместо >=.

0

Изменение вашей функции должно быть примерно таким. 0 не является положительным числом. Используйте> вместо> =.

def triple_positives(xs): 
    List = [] 
    product = 3 
    for i in xs: 
     if i > 0: 
      i=i*product 
     List.append(i) 
    return List 

Но это может быть сделано, как этот также

def triple_positives(xs): 
    return [3*i if i>0 else i for i in xs ] 
+1

короткий список Комп просто для удовольствия: '[2 * х + абс (х) для x в xs] ' –

+0

*« 0 не является положительным числом »* - но считаете ли вы его положительным, отрицательным или никоим образом,' 0 * 3 == 0'! – jonrsharpe