在python中,如何使用double for循环打印表?

时间:2016-02-08 00:38:32

标签: python python-2.7

这是我的python代码,

from fractions import gcd 
print "| 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
print "-----------------------------------"
xlist = range(2,16)
ylist = range(2,51)
for b in ylist:
     print b, " | "
     for a in xlist:
        print gcd(a,b)

我无法打印将在顶行2-15和左列显示值2-50的表格。使用每行和每列的每个值的gcd表。

这是我正在获得的样本

| 2 3 4 5 6 7 8 9 10 11 12 13 14 15

2 |

2

1

2

3 个答案:

答案 0 :(得分:2)

你可以使用列表理解更加简洁:

from fractions import gcd
print("   |   2  3  4  5  6  7  8  9 10 11 12 13 14 15")
print("-----------------------------------------------")
xlist = range(2,16)
ylist = range(2,51)

print("\n".join(" ".join(["%2d | " % b] + [("%2d" % gcd(a, b)) for a in xlist]) for b in ylist))

输出:

   |   2  3  4  5  6  7  8  9 10 11 12 13 14 15
-----------------------------------------------
 2 |   2  1  2  1  2  1  2  1  2  1  2  1  2  1
 3 |   1  3  1  1  3  1  1  3  1  1  3  1  1  3
 4 |   2  1  4  1  2  1  4  1  2  1  4  1  2  1
 5 |   1  1  1  5  1  1  1  1  5  1  1  1  1  5
 6 |   2  3  2  1  6  1  2  3  2  1  6  1  2  3
 7 |   1  1  1  1  1  7  1  1  1  1  1  1  7  1
 8 |   2  1  4  1  2  1  8  1  2  1  4  1  2  1
 9 |   1  3  1  1  3  1  1  9  1  1  3  1  1  3
10 |   2  1  2  5  2  1  2  1 10  1  2  1  2  5
11 |   1  1  1  1  1  1  1  1  1 11  1  1  1  1
12 |   2  3  4  1  6  1  4  3  2  1 12  1  2  3
13 |   1  1  1  1  1  1  1  1  1  1  1 13  1  1
14 |   2  1  2  1  2  7  2  1  2  1  2  1 14  1
15 |   1  3  1  5  3  1  1  3  5  1  3  1  1 15
16 |   2  1  4  1  2  1  8  1  2  1  4  1  2  1
17 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
18 |   2  3  2  1  6  1  2  9  2  1  6  1  2  3
19 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
20 |   2  1  4  5  2  1  4  1 10  1  4  1  2  5
21 |   1  3  1  1  3  7  1  3  1  1  3  1  7  3
22 |   2  1  2  1  2  1  2  1  2 11  2  1  2  1
23 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
24 |   2  3  4  1  6  1  8  3  2  1 12  1  2  3
25 |   1  1  1  5  1  1  1  1  5  1  1  1  1  5
26 |   2  1  2  1  2  1  2  1  2  1  2 13  2  1
27 |   1  3  1  1  3  1  1  9  1  1  3  1  1  3
28 |   2  1  4  1  2  7  4  1  2  1  4  1 14  1
29 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
30 |   2  3  2  5  6  1  2  3 10  1  6  1  2 15
31 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
32 |   2  1  4  1  2  1  8  1  2  1  4  1  2  1
33 |   1  3  1  1  3  1  1  3  1 11  3  1  1  3
34 |   2  1  2  1  2  1  2  1  2  1  2  1  2  1
35 |   1  1  1  5  1  7  1  1  5  1  1  1  7  5
36 |   2  3  4  1  6  1  4  9  2  1 12  1  2  3
37 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
38 |   2  1  2  1  2  1  2  1  2  1  2  1  2  1
39 |   1  3  1  1  3  1  1  3  1  1  3 13  1  3
40 |   2  1  4  5  2  1  8  1 10  1  4  1  2  5
41 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
42 |   2  3  2  1  6  7  2  3  2  1  6  1 14  3
43 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
44 |   2  1  4  1  2  1  4  1  2 11  4  1  2  1
45 |   1  3  1  5  3  1  1  9  5  1  3  1  1 15
46 |   2  1  2  1  2  1  2  1  2  1  2  1  2  1
47 |   1  1  1  1  1  1  1  1  1  1  1  1  1  1
48 |   2  3  4  1  6  1  8  3  2  1 12  1  2  3
49 |   1  1  1  1  1  7  1  1  1  1  1  1  7  1
50 |   2  1  2  5  2  1  2  1 10  1  2  1  2  5

这适用于Python2 Python3。如果您希望在每个一位数的开头加零,请将%2d的每个出现替换为%02d。您可能不应该像这样打印标题,但更像是这样:

from fractions import gcd
xlist = range(2, 16)
ylist = range(2, 51)
string = "   | " + " ".join(("%2d" % x) for x in xlist)
print(string)
print("-" * len(string))

print("\n".join(" ".join(["%2d | " % b] + [("%2d" % gcd(a, b)) for a in xlist]) for b in ylist))

这样,即使您更改xlistylist,该表仍然会很好看。

答案 1 :(得分:0)

你的问题是python print语句本身就添加了换行符。

对此的一个解决方案是建立自己的字符串以逐个输出,并且每行只使用一个print语句,如下所示:

from fractions import gcd 
print "| 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
print "-----------------------------------"
xlist = range(2,16)
ylist = range(2,51)
for b in ylist:
     output=str(b)+" | " #For each number in ylist, make a new string with this number
     for a in xlist:
        output=output+str(gcd(a,b))+" " #Append to this for each number in xlist
     print output #Print the string you've built up

顺便说一下示例输出:

| 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-----------------------------------
2 | 2 1 2 1 2 1 2 1 2 1 2 1 2 1
3 | 1 3 1 1 3 1 1 3 1 1 3 1 1 3
4 | 2 1 4 1 2 1 4 1 2 1 4 1 2 1
5 | 1 1 1 5 1 1 1 1 5 1 1 1 1 5
6 | 2 3 2 1 6 1 2 3 2 1 6 1 2 3
7 | 1 1 1 1 1 7 1 1 1 1 1 1 7 1
8 | 2 1 4 1 2 1 8 1 2 1 4 1 2 1
9 | 1 3 1 1 3 1 1 9 1 1 3 1 1 3

答案 2 :(得分:0)

您可以使用print中的end参数指定行的末尾类型。

from fractions import gcd 
print("| 2 3 4 5 6 7 8 9 10 11 12 13 14 15")
print("-----------------------------------")
xlist = range(2,16)
ylist = range(2,51)
for b in ylist:
     print(b + " | ",end="")
     for a in xlist:
        print(gcd(a,b),end="")
     print("")#Newline

如果您使用的是python 2.x,则需要在顶部添加from __future__ import print_function才能生效。