Проблема с отступом в программировании на Python

#python

#python

Вопрос:

Интересно, может ли кто-нибудь прочитать этот код и рассказать мне, почему это происходит. Я не могу быть первым, кто столкнулся с этим, но я огляделся и не могу найти ответ в книге или где-либо еще.

Это должно быть что-то незначительное, но я этого не вижу.

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

def main():
    print('RadiustAreatCircumference')
    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
>>> 
  

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

Комментарии:

1. Как вы его запускаете и на какой ОС?

2. Я работаю на Windows 8.1 и использую интерпретатор Python.

3. почему u используется. для lop для окружности? это необходимо

4. В коде нет ничего плохого, просто так t работает.

Ответ №1:

Чтобы обеспечить выравнивание, вы можете сначала сделать каждое число строкой фиксированной ширины.

 def main():
    print('RadiustAreatCircumference')
    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("%6st%6st%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. Это работает, но теперь форматируется только окружность ‘.2f’. Могу ли я сделать их все такими? Я пытался, но это сработало не так, как я пробовал, но работает наверняка.

2. Я лично являюсь поклонником этого стиля форматирования, но имейте в виду, что это не новый стиль форматирования python, который вы увидите в других ответах. Вы могли бы ссылаться на этот стиль как форматирование «printf».

Ответ №2:

Вам необходимо выровнять форматирование строки выходного чтения в демо-версии

  print('{:<10}{:<10}{:<10}'.format(area,radius,circumference))
  

Ответ №3:

Это комбинация того, как работает tab ( 't' ) и как работает Python print . По умолчанию print вставляется пробел между каждым элементом, который он выводит, и поэтому то, что на самом деле выводится (например) в строке 6, является:

 6.0<SPACE><TAB><SPACE>113.04<SPACE><TAB><SPACE>37.68
  

С другой стороны, вкладка переходит к следующему столбцу, который кратен восьми пробелам от начала строки. Когда печатается вторая вкладка в строке 6, с момента предыдущей вкладки было выведено 8 символов, и поэтому вкладка в конечном итоге печатает полные восемь пробелов, чтобы перейти к следующей остановке табуляции.

Самый простой способ исправить это — устранить пробелы между print элементами, явно указав пустое sep значение:

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

Комментарии:

1. Или, может быть, просто указать sep='t' и избавиться от явных 't' элементов.

Ответ №4:

Вам нужно будет использовать строковый формат, чтобы обеспечить согласованное расстояние между столбцами:

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

Значение 12 означает, что каждый из ваших столбцов (включая текст в нем) будет иметь ширину 12 символов.

Вот официальная ссылка на форматирование строк в Python

Ответ №5:

я изменил ваш код, теперь он работает.

 def main():
print('RadiustAreatCircumference')
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'))