Преобразуйте простой цикл for в цикл while в python

#python #for-loop #while-loop

Вопрос:

Я новичок в python и пытаюсь преобразовать этот простой цикл for в цикл while. Я не уверен, почему я не получаю тот же результат. Большое спасибо.

 for var in (1,2,3,4,5):
   total=total var
   print(total)

#my attempt
var=0.0
while(var<6):
   var=var 1
   print(var)

 

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

1. Почему var установлено значение 0? Почему для условия установлено значение по < 7 сравнению с вашим циклом for, заканчивающимся на 5 ?

2. Изменить на for var in (1,2,3,4,5,6): или while(var<6): (не то и другое :))

3. Ваш цикл for проходит через значения в предоставленном вами кортеже (1, 2, 3, 4, 5) . Вы увеличиваете общее количество с помощью этих предметов. Это означает, что total напечатает 1 , 3 , 6 , 10 , 15 . Ваш цикл while-это простой счетчик, который каждый раз увеличивается на 1.

4. Почему вы ожидаете такого же результата? В одном случае вы добавляете 1,2,3,4,5, в то время как в другом вы добавляете 1 6 раз.

Ответ №1:

Я просто преобразую свой комментарий в ответ с различными способами его исправления.
для цикла:

 for var in (1,2,3,4,5):
   total=total var
   print(total)
 

Предполагая total = 0 , что перед циклом в каждом цикле цикла for var выполняется следующий элемент в предоставленном вами кортеже. Поскольку вы добавляете эти значения total , вы получаете ту же функциональность, что и функция sum , которая в значительной степени суммирует значения в коллекции.

в то время как-цикл:

 var=0.0
while(var<6):
   var=var 1
   print(var)
 

Здесь то, что вы делаете,-это подсчет повторений, в отличие от функции суммирования в цикле for.
Для каждого цикла вы увеличиваете var значение на 1.

Ваши варианты:

  1. Подведение
 total = 0
for var in (1,2,3,4,5):
   total= total   var
   print(total)

total = 0
var = 0
while var < 5:
   var  = 1
   total  = var
   print(total)
 
  1. Подсчет повторений:
 for var in (1,2,3,4,5):
   print(var)

var = 0.0
while var < 5:
   var  = 1
   print(var)
 

Ответ №2:

Причина, по которой вы не получаете тот же ответ, потому что при использовании while вы просто увеличиваете цикл на 1. Приведенный ниже код поможет вам

 var=0
count=0
while(var<6):
    count=count var
    var=var 1
print(count)
 

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

1. Разве это не тот же ответ, что и @Prerak Mathur, но с использованием другого имени переменной?

Ответ №3:

«Разворачивание» обеих петель делает ответ очевидным. Например.

 total=0
for var in (1,2,3):
   total=total var
   print(total)
 

это то же самое, что:

 total = 0
var = 1
total = total   var
print(total)

var = 2
total = total   var
print(total)

var = 3
total = total   var
print(total)
 

Теперь ясно, что total это арифметический ряд (0 1 2 … n).

Проделайте то же самое while с циклом:

 var=0.0
while(var<3):
   var=var 1
   print(var)
 

это то же самое, что:

 var = 0.0

var = var   1
print(var)

var = var   1
print(var)

var = var   1
print(var)
 

Из чего очевидно, что while цикл просто увеличивается var 1 на каждой итерации.

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

Ответ №4:

Проблема с вашим кодом цикла while заключается в том, что вы определили только счетчик (который равен var = 0.0) в начале цикла while, вы также должны объявить переменную для общей суммы всех элементов

 total=0
var=1
while(var<6):
   total=total var
   print(total)
   var=var 1
 

Это сработает

Ответ №5:

Проблема заключается в логической ошибке в вашем коде. В цикле for вы просматриваете кортеж и добавляете полученное значение. В цикле while вы увеличиваете значение на основе счетчика.

Вот как вы это делаете.

 list_items = [1,2,3,4,5]
total = 0

while list_items:
  item = list_items.pop()
  total  = item
  print(item)