Может кто-нибудь помочь мне разобраться с ошибкой разбора в этом коде? - PullRequest
0 голосов
/ 20 сентября 2011
  1. Вывод этого кода очень похож, но не совсем то, что он должен быть.
  2. Код:

    def printMultiples(n):
        i = 1
        while (i <= 10):
            print(n*i, end = '  ')
            i += 1
    n = 1
    while (i<= 3):
        printMultiples(n)
        n += 1
    
  3. Вывод:

    1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30
    
  4. Принимая во внимание, что это должно быть как:

    1 2 3 4  5  6  7  8  9  10
    2 4 6 8  10 12 14 16 18 20
    3 6 9 12 15 18 21 24 27 30
    
  5. Как этот код должен быть изменен?

Ответы [ 4 ]

1 голос
/ 20 сентября 2011

добавить пустой print в конце printMultiples, вне цикла while (i <= 10):.

0 голосов
/ 20 сентября 2011

Если вы уже знаете, что хотите дополнить числа шириной 3, тогда подходящее (и более питоническое) printMultiples будет

def printMultiples(n):
    txt = "".join(["{0: <3d}".format(n*i) for i in range(1, 11)])
    print(txt)

Лучше было бы разрешить изменение ширины.И тогда вы можете передать ширину, которую вы предпочитаете, например, ширину наибольшего ожидаемого числа

def printMultiples(n, width=3):
    txt = "".join(["{0: <{1}d}".format(n*i, width) for i in range(1, 11)])
    print(txt)

width = len(str(4 * 10)) + 1
for i in range(1, 4):
    printMultiples(i, width )
0 голосов
/ 20 сентября 2011

Чтобы выровнять столбцы, вам необходимо полностью изменить подход.В настоящее время printMultiples() не может знать, сколько пробелов ставить после каждого числа, потому что не знает, сколько раз он будет вызываться во внешнем цикле while.

Что вы можете сделать:

  • создайте двумерный массив строковых представлений для каждого кратного числа (пока ничего не печатая) - для этого будет полезна функция str()
  • для каждого столбца, проверьте длинусамое длинное число в этом столбце (оно всегда будет последним) и добавьте одну
  • печать каждой строки, добавив соответствующее количество пробелов после каждой строки, чтобы соответствовать количеству пробелов, необходимых для этого столбца

Более простой подход, если вы только заинтересованы в столбцовом выводе, а не в точном интервале, заключался бы в печати каждого числа с достаточным пространством после него, чтобы вместить наибольшее число, которое вы ожидаете вывести.,Таким образом, вы можете получить:

1   2   3   4   5   6   7   8   9   10
2   4   6   8   10  12  14  16  18  20
3   6   9   12  15  18  21  24  27  30

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

Изменение существующегоКод сделать это было бы проще.Подробнее см. Формат строки синтаксиса .

0 голосов
/ 20 сентября 2011

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

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