2016-02-08 2 views
0

Вот мой питон код,В python, как распечатать таблицу, используя double для циклов?

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 |

+0

Можете ли вы показать нам, что вы * получаете? – zondo

+0

@zondo Просмотреть код + выход [здесь] (http://goo.gl/T3NYZq). – winterfox

+0

Я просто поставил образец вывода, не знаю, как отобразить весь вывод без необходимости его редактировать. – user5896534

ответ

0

Ваша проблема заключается в том, что оператор питон печати добавляет символ новой строки сам по себе.

Одним из решений этой проблемы заключается в создании вашей собственной строки для вывода по частям и использовать только один оператор печати в каждой строке таблицы, как например:

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 
+0

Я никогда не думал о том, чтобы сделать длинный строка, имеет смысл! – user5896534

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)) 

Outpu т:

| 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)) 

Таким образом, даже если вы измените xlist или ylist, таблица будет по-прежнему хорошо выглядеть.

+0

В этом ответе не учитывается условие OP для печати наибольшего общего знаменателя. –

+0

Большое вам спасибо за указание на это. Я поражен тем, что меня еще не проголосовали, но я исправил его, чтобы не быть сейчас. – zondo

+0

Я удалил свой неправильный комментарий в формате @zondo. Я думаю, что это работает: «% 2d% 2d ...» –

0

Вы можете указать, какой символ заканчивает линию, используя конечный параметр в печати.

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 к вершине для этой работы.

Смежные вопросы