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