Преобразование вложенного цикла for во вложенный цикл while - PullRequest
0 голосов
/ 13 ноября 2018
my_data = [4, 8, 15, 16, 23, 42]
index = 0
for item in my_data:
    k = 0
    for i in range(2, item+1):
        if (i % 2 == 0):
            k += 1
    my_data[index] = k
    index += 1
print(my_data)

Приведенный выше код берет все элементы данного списка и делит их на 2, и все работает нормально, однако я пытался преобразовать его в цикл while для практики, но по какой-то причине яне получаю ошибки, но код продолжает работать, и мне пришлось принудительно остановить его.

i = 0
while i < len(my_data):
    j = 2
    while j < i+1:
        if j % 2 == 0:
            j += 1
    my_data[i] = j
    i += 1
print my_data

И вот метод, который я пытался реализовать, который, кажется, не работает, насколько я обеспокоен.Если бы кто-то мог уточнить это для меня, я был бы признателен.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

ваш второй цикл while движется вперед, только если j - пара, а если j - нет (поскольку j увеличивается только на 1), цикл while будет зацикливаться вечно. вы сделали небольшую ошибку, заменив k на j, и вам следует продолжить использовать k

i = 0
while i < len(my_data):
    j = 2
    k = 0
    while j < i+1:
        if j % 2 == 0:
            k+=1
        j += 1
    my_data[i] = k
    i += 1
print my_data
0 голосов
/ 13 ноября 2018

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

my_data = [4, 8, 15, 16, 23, 42]
index = 0
while len(my_data) > index:
    my_data[index] = int(my_data[index]/2)
    index +=1

print(my_data)
0 голосов
/ 13 ноября 2018

В строке 5:

if j % 2 == 0:

Когда i==3 и j==3, оператор if игнорируется.j не может быть увеличено.Он будет зациклен навсегда, поскольку критерий остановки равен j<i+1
Просто добавьте оператор else для обработки этого случая

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...