Как модерировать элементы списка в цикле

1

Как я могу убедиться, что элементы в b не опускаются ниже 0 или выше 10?

Т.е. когда 5 уменьшается до 0 в списке b, как я могу заставить программу увеличить ее до 1, а затем сделать приращения 1?

a = [2, 5, 7]
b = []
m = True
counter = 1

while m == True:

    for i in a:

        if i >= 5:
            i -= counter
            b.append(i)
        else:
            i += counter
            b.append(i)

        if len(a) == len(b):
            counter += 1
            print(b)
            b.clear()

        if counter == 15:
            m = False

"""
Current output: 
[2, 5, 7]
[3, 4, 6]
[4, 3, 5]
[5, 2, 4]
[6, 1, 3]
[7, 0, 2]
[8, -1, 1]
[9, -2, 0]
[10, -3, -1]
[11, -4, -2]

Expected output:
[2, 5, 7]
[3, 4, 6]
[4, 3, 5]
[5, 2, 4]
[6, 1, 3]
[7, 0, 2]
[8, 1, 1]
[9, 2, 0]
[10, 3, 1]
[9, 4, 2]
"""
  • 1
    Попробуйте использовать оператор модуля%
  • 0
    Как и вы сказали: напишите оператор if чтобы проверить i ; если он достигает 0, сбросьте counter на 1 и немедленно увеличьте. Где вы застряли при написании этого кода? Что вы пробовали?
Показать ещё 3 комментария
Теги:
list
loops

1 ответ

0
Лучший ответ

Не уверен, что я полностью слежу за тем, что вам нужно, но ниже приведен подход к получению ожидаемого результата (я не следовал тому, что вы пытались сделать с циклом while, поэтому я просто зацикливал это 15 раз на основе вашего максимального счетчика value - но вы можете сделать что-то еще с этим внешним циклом).

numbers = [2, 5, 7]
switches = [True, False, False]
output = list()

for _ in range(15):
    for i, number in enumerate(numbers):
        # keep numbers between 0 and 10
        if number == 0:
            switches[i] = True
        elif number == 10:
            switches[i] = False
        # increment or decrement number based on corresponding "switch"    
        if switches[i]:
            number+=1
            output.append(number)
        else:
            number-=1
            output.append(number)
        # print and reset
        if len(output) == len(numbers):
            numbers = output
            output = list()
            print(numbers)

# OUTPUT
# [3, 4, 6]
# [4, 3, 5]
# [5, 2, 4]
# [6, 1, 3]
# [7, 0, 2]
# [8, 1, 1]
# [9, 2, 0]
# [10, 3, 1]
# [9, 4, 2]
# [8, 5, 3]
# [7, 6, 4]
# [6, 7, 5]
# [5, 8, 6]
# [4, 9, 7]
# [3, 10, 8]
  • 0
    Спасибо, я многому научился от этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню