嵌套循环:以图形方式表示最多20个数字的因子

时间:2014-04-30 08:12:17

标签: python python-2.7 iteration nested-loops

我想在python中编写一个以图形方式表示数字因子的程序。我不知道如何用文字解释我的意思,所以我将描述我正在寻找的输出:

* - - - - - - - - - - - - - - - - - - -
* * - - - - - - - - - - - - - - - - - -
* - * - - - - - - - - - - - - - - - - -
* * - * - - - - - - - - - - - - - - - -
* - - - * - - - - - - - - - - - - - - -
* * * - - * - - - - - - - - - - - - - -
* - - - - - * - - - - - - - - - - - - -
* * - * - - - * - - - - - - - - - - - -
* - * - - - - - * - - - - - - - - - - -
* * - - * - - - - * - - - - - - - - - -
* - - - - - - - - - * - - - - - - - - -
* * * * - * - - - - - * - - - - - - - -
* - - - - - - - - - - - * - - - - - - -
* * - - - - * - - - - - - * - - - - - -
* - * - * - - - - - - - - - * - - - - -
* * - * - - - * - - - - - - - * - - - -
* - - - - - - - - - - - - - - - * - - -
* * * - - * - - * - - - - - - - - * - -
* - - - - - - - - - - - - - - - - - * -
* * - * * - - - - * - - - - - - - - - *

我写了这个程序:

for i in range (1,21):
    for j in range (1,21):
        if i%j == 0:
            print '*',
        else:
            print '_',

但输出是单行的,我不知道如何解决这个问题。我玩弄逗号,但我仍然没有得到我想要的东西。

顺便说一下,几乎所有的问题都与格式化输出有关。我怎样才能改进呢?书籍或教程中没有章节专门用于格式化输出,因此我不知道如何改进。

2 个答案:

答案 0 :(得分:2)

只需在第一个print循环中添加for语句:

for i in range (1,21):
    for j in range (1,21):
        if i%j == 0:
            print '*',
        else:
            print '-',
    print

[OUTPUT]
* - - - - - - - - - - - - - - - - - - -
* * - - - - - - - - - - - - - - - - - -
* - * - - - - - - - - - - - - - - - - -
* * - * - - - - - - - - - - - - - - - -
* - - - * - - - - - - - - - - - - - - -
* * * - - * - - - - - - - - - - - - - -
* - - - - - * - - - - - - - - - - - - -
* * - * - - - * - - - - - - - - - - - -
* - * - - - - - * - - - - - - - - - - -
* * - - * - - - - * - - - - - - - - - -
* - - - - - - - - - * - - - - - - - - -
* * * * - * - - - - - * - - - - - - - -
* - - - - - - - - - - - * - - - - - - -
* * - - - - * - - - - - - * - - - - - -
* - * - * - - - - - - - - - * - - - - -
* * - * - - - * - - - - - - - * - - - -
* - - - - - - - - - - - - - - - * - - -
* * * - - * - - * - - - - - - - - * - -
* - - - - - - - - - - - - - - - - - * -
* * - * * - - - - * - - - - - - - - - *

<强>

<强> ALTERNATIVE

b = [' '.join('*' if i==j or i%j==0 else '-' for j in range(1,21)) for i in range(1,21)]

for i in b:
    print i

[SAME OUTPUT]

Tom Fenech的建议

您可以在一行中执行以下操作:

print '\n'.join(' '.join('*' if i % j == 0 else '_' for j in xrange(1,21)) for i in xrange(1,21))

答案 1 :(得分:0)

在你的第一个for循环的每次迭代之后只包含一个print语句...或者换句话说,我的意思是你必须每次打印一个换行符,i在你的情况下递增,在python中你可以打印一个使用以下语法换行:

print 

print "\n"