Что не так с моими вложенными циклами в Python? - PullRequest
0 голосов
/ 17 февраля 2009

Как сделать вложенные циклы в Python (версия 3.0)?

Я пытаюсь получить следующие циклы, чтобы показать мне произведения двух чисел:

def PrintProductsBelowNumber(number):
    number1 = 1
    number2 = 1
    while number1 <= number:
        while number2 <= number:
            print(number1, "*", number2, "=", number1 * number2)
            number2 += 1
        number1 += 1

PrintProductsBelowNumber(2)

В результате получаю:

1 * 1 = 1
1 * 2 = 2

Так что, похоже, внешний цикл над номером 1 не работает.

Как мне запустить цикл по номеру 1 и получить таким образом:

1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4

Ответы [ 3 ]

14 голосов
/ 17 февраля 2009

number2 инициализируется только один раз, вам нужно повторно инициализировать его для каждой итерации внутреннего цикла. Однако этот код очень C-подобен и не очень Pythonic. Лучший способ сделать это - использовать конструкцию for number in range(n):

def PrintProductsBelowNumber(number):
    for number1 in range(1, number+1):
        for number2 in range(1, number+1):
            print(number1, "*", number2, "=", number1 * number2)
8 голосов
/ 17 февраля 2009

Потому что вы не устанавливаете число 2 обратно на 1 после того, как внутренний цикл завершается в первый раз. число 1 затем увеличивается, но поскольку число 2 все еще слишком велико, внутренний цикл больше не запускается.

def PrintProductsBelowNumber(number):
    number1 = 1
    while number1 <= number:
        number2 = 1
        while number2 <= number:
            print(number1, "*", number2, "=", number1 * number2)
            number2 += 1
        number1 += 1

PrintProductsBelowNumber(2)

РЕДАКТИРОВАТЬ : решение Адама в целом намного лучше, но это показывает, почему вы не работали так, как вы думали, во-первых.

0 голосов
/ 18 февраля 2009

Вы можете изменить решение Адама с помощью понимания списка:

def PrintProductsBelowNumber(number):

    results = [(i, j, i * j) for i in range(1, number + 1) 
                             for j in range(1, number + 1)]

    for number1, number2, result in results:
        print(number1, "*", number2, "=", result)

или его разновидности.

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