Python编程缩进问题

时间:2014-06-23 02:08:28

标签: python

我想知道是否有人可以阅读此代码并告诉我为什么会这样。我不能成为第一个遇到这种情况的人,但我环顾四周,无法在书中或其他地方找到答案。

这必须是次要的,但我无法看到它。

# This program will find and calculte the radius
# area and circumference of a circle.

def main():
    print('Radius\tArea\tCircumference')
    print('----------------------------')
    print()
    for radius in range(1, 11):
        for area in range(1, 11):
            for circumference in range(1, 11):
                pi = 3.14
                diameter = radius * 2
                radius = diameter / 2
                area = pi * radius**2
                circumference = (2 * pi) * radius

        print(radius, '\t', area, '\t',format(circumference, '.2f'))



main()

输出:

Radius  Area    Circumference
----------------------------

1.0      3.14    6.28
2.0      12.56   12.56
3.0      28.26   18.84
4.0      50.24   25.12
5.0      78.5    31.40
6.0      113.04      37.68
7.0      153.86      43.96
8.0      200.96      50.24
9.0      254.34      56.52
10.0     314.0   62.80
>>> 

输出在前两列中对齐,但第三列中的十列中有四列似乎是右侧的选项卡。 ??

5 个答案:

答案 0 :(得分:2)

为确保对齐,您可以先将每个数字设为固定宽度的字符串。

def main():
    print('Radius\tArea\tCircumference')
    print('----------------------------')
    print()
    for radius in range(1, 11):
        for area in range(1, 11):
            for circumference in range(1, 11):
                pi = 3.14
                diameter = radius * 2
                radius = diameter / 2
                area = pi * radius**2
                circumference = (2 * pi) * radius

        #print(radius, '\t', area, '\t' , format(circumference, ".2f"))
        radius_str        = "%0.2f" % radius
        area_str          = "%0.2f" % area
        circumference_str = "%0.2f" % circumference
        print("%6s\t%6s\t%6s" % (radius_str, area_str, circumference_str))

main()

输出:

Radius  Area    Circumference
----------------------------

  1.00    3.14    6.28
  2.00   12.56   12.56
  3.00   28.26   18.84
  4.00   50.24   25.12
  5.00   78.50   31.40
  6.00  113.04   37.68
  7.00  153.86   43.96
  8.00  200.96   50.24
  9.00  254.34   56.52
 10.00  314.00   62.80

答案 1 :(得分:2)

您需要对输出read string formatting a demo

进行对齐
 print('{:<10}{:<10}{:<10}'.format(area,radius,circumference))

答案 2 :(得分:1)

这是tab('\t')工作方式和Python print工作方式的组合。默认情况下,print在打印出的每个项目之间插入一个空格,因此实际打印出来的内容(例如)第6行是:

6.0<SPACE><TAB><SPACE>113.04<SPACE><TAB><SPACE>37.68
另一方面,

Tab前进到下一列,该列是从行首开始的八个空格的倍数。当打印第6行的第二个选项卡时,自上一个选项卡以来已输出8个字符,因此选项卡最终打印出完整的8个空格以进入下一个制表位。

解决此问题的最简单方法是通过明确指定空print值来消除sep项之间的空格:

    print(radius, '\t', area, '\t',format(circumference, '.2f'), sep='')

答案 3 :(得分:0)

您需要使用字符串格式来确保列之间的间距保持一致:

line = '{:>12}  {:>12}  {:>12}'.format(radius, area, format(circumference, '.2f'))
print(line)

值12表示每个列(包括其中的文本)将为12个字符宽。

以下是String formatting in Python

的官方参考

答案 4 :(得分:0)

我重新安排了您的代码,现在它可以正常工作。

def main():
print('Radius\tArea\tCircumference')
print('----------------------------')
print()
for radius in range(1, 11):
    for area in range(1, 11):
        for circumference in range(1, 11):
            pi = 3.14
            diameter = radius * 2
            radius = diameter / 2
            area = pi * radius**2
            circumference = (2 * pi) * radius

    print(radius, '\t', format(area, '.2f')+'\t ' ,format(circumference, '.2f'))