2016-11-21 5 views
-1

Упражнение: Начиная с задней частью строки найти все числа, которые могли бы привести к ряду, которое больше или равно 100, то остановитесь и найдите среднее число до этого.Когда я запускаю мой код питон просто сижу там и оленья кожа печать ничего

def avgBackwList(values): 
    total = 0 
    for i in range(1,len(values)+1): 
     while values[-i] <= 100: 
      total = total + int(values[-i]) 
    return (total/i) 

values = [110,2,4] 
print(avgBackwList(values)) 
+2

, пожалуйста, прочитайте [ask], правильно отформатируйте свой вопрос, если хотите «halp» ... – Julien

+7

Если я ошибаюсь, ваш цикл while никогда не закончится, если вы не перейдете в список с окончательным значением> 100 – elethan

+0

добавьте что-то вроде i + = 1 в цикле while, так что значение i увеличивается другим образом, цикл бесконечен – thebadguy

ответ

0

Петля в то время как в функции вычисляет значения BOOL [-1] < = 100. Так как это верно, он никогда не нарушает цикл.

+0

Я думаю, что в точке, где OP застревает в цикле while, он будет оценивать значения [-1] <= 100', а не 'значения [-2] '. – elethan

+0

Неправда. вы можете проверить это, напечатав значения [-i]. Может быть, вы сбиваете с толку индекс -1 как объект i. Его код перебирает список, начинающийся с индекса -2, а затем переходит в цикл while. 4 <100, чтобы он никогда не возвращался. – user4642224

+0

Должно быть, вы недопонимаете вас. Все, что я говорю, это то, что первый раз через цикл 'для i в диапазоне (1, len (значения) +1)' значение 'i' будет' 1', и поэтому '-i' будет' - 1'. Кроме того, значение в индексе '-2' равно' 2', а '4' - в индексе' -1'. Откройте интерпретатор python и выполните 'print ([110,2,4] [- 2])', если вы мне не верите.Кроме того, вы можете попробовать 'for i в диапазоне (1, len (значения) +1): print (i, -i)', и вы увидите '1',' -1'. Я не ответил на ваш ответ, потому что ваша логика правильная, я просто предлагаю вам исправить опечатку. – elethan

0

Вы создали бесконечный цикл while. Условие для цикла в то время как это:

while values[-i] <= 100: 

Для того, чтобы этот цикл на каждый конец, в конце концов values[-i] <= 100 необходимо оценить в False. Тем не менее, i в вашем случае никогда не будет иметь шансов на изменение, потому что цикл while должен закончить цикл for, чтобы продолжить. Для того, чтобы сделать его немного более ясно, что происходит, следует соблюдать следующие правила:

In [8]: for i in ['a', 'b', 'c']: 
    ...:  print(i) 
    ...:  j = 0 
    ...:  while j < 5: 
    ...:   print(j) 
    ...:   j += 1 

a 
0 
1 
2 
3 
4 
b 
0 
1 
2 
3 
4 
c 
0 
1 
2 
3 
4 

Другими словами, цикл получает значения 'a', то цикл, а заканчивает собирается хотя 0-4, и только тогда внешняя петля доходит до 'b' и так далее. Ради вас, я не хочу решать ваше домашнее задание для вас. Я скажу, однако, что в отношении вашего текущего кода вам нужно будет найти способ сделать ваше состояние while в конечном итоге False, не полагаясь на изменение значений, создаваемых внешним циклом.

1

Линия

 while values[-i] <= 100: 

вызовет функцию к петле до тех пор, пока values[i] меньше или равно 100. Так как ни в while блоке изменяет values[i], если цикл вводится на все это будет никогда не заканчиваются.

Есть и другие проблемы, связанные с вашей функцией, которые означают, что он не будет работать правильно, но для начала, вы можете попробовать изменить эту строку в

 while total <= 100: 

... который по крайней мере, есть шанс заканчивается, потому что total изменяется внутри блока while.

+0

спасибо! поэтому следует ли изменить цикл while на оператор if лучше? –

+0

Попробуй и посмотри :-) Честно говоря, я думаю, вам понадобится несколько итераций, чтобы получить от кода, который у вас есть для рабочего решения ... поскольку это, очевидно, назначение, я предпочитаю указать на немедленное проблема, которая блокировала вас, а не предоставляла полное рабочее решение. –

 Смежные вопросы

  • Нет связанных вопросов^_^