Как я могу исправить выравнивание этого оператора печати? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать таблицу, которая перебирает различные значения скорости ветра, чтобы вычислить таблицу, которая выглядит следующим образом: Идеальный прогон .Однако, как только я запускаю следующий код:

import math
y=' '
print("Big Blue Wind Chill") 
print(y) 
airTemp=float(input("Enter air temperature (F): ")) 
startWS=eval(input("Enter starting wind speed (mph): ")) 
print(y)
print("Temperature = " + str(airTemp) + " degrees F") 
print(y) 
entries = x = [[] for i in range(91-startWS)]
def Main(): 
    i=startWS
    for i in range(startWS,91):
        entries[i-startWS].append(i)
        i=i+1 
Main()    
def oldForumula():
    i=startWS
    for i in range(startWS,91):
            old=round(0.081*(3.71*math.sqrt(i)+5.81-0.25*i)*(airTemp-91.4)+91.4)
            entries[i-startWS].append(old)
            i=i+1 
oldForumula()
def newForumula():
    i=startWS
    for i in range(startWS,91):
            new=round(35.74+0.6215*airTemp-35.75*(i**0.16)+0.4275*airTemp*(i**0.16))
            #print(new) 
            entries[i-startWS].append(new)
            i=i+1 
newForumula()      
def difference():
    i=startWS
    for i in range(startWS,91):
            diff=round((0.081*(3.71*math.sqrt(i)+5.81-0.25*i)*(airTemp-91.4)+91.4)-(35.74+0.6215*airTemp-35.75*(i**0.16)+0.4275*airTemp*(i**0.16)),1)
            #print(diff) 
            entries[i-startWS].append(diff)
            i=i+1 
difference()

print('Wind Speed', 'Old Formula', 'New Formula', 'Difference', sep='\t')
print(y)
for i in range(len(entries)):
    for j in range(4):
        print(entries[i][j], end='\t\t')
    print()

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

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Вы можете просто заполнить пробелами, используя str.format ().

def draw_padded_string(s, width, align="left"):
    if align == "left":
        return "{s: <{width}}".format(s=s, width=width)
    elif align == "center":
        return s.center(width, ' ')
    elif align == "right":
        return "{s: >{width}}".format(s=s, width=width)

В этом случае s - это строка, а width - вся ширина вашего столбца.

Youопределит это где-то в вашем коде, возможно, при импорте, просто чтобы убрать его с вашего пути, но до тех пор, пока оно определено до того, как вы начнете вызывать операторы print.Это также немного изменило бы ваш блок печати:

width = 13

headers = ["Wind Speed", "Old Formula", "New Formula", "Difference"]
print_headers = []
for header in headers:
    print_headers.append(draw_padded_string(header, width))
print("".join(print_headers))
print()

for row in entries:
    print_row = []
    for data in row:
        print_row.append(draw_padded_string(data, width))
    print("".join(print_row))

Что я сделал:

  • установил ширину на 13 (ваш самый широкий столбец сейчас равен 11)
  • создал списки каждой строки для печати
  • применил нашу функцию к каждому элементу списка
  • распечатать список как одну строку, используя "".join(list)
  • , измененное сиспользуя собственное целочисленное отслеживание, используя i и j, и вместо этого позвольте python итерировать по вашим строкам и столбцам для вас

Что вы можете сделать по-другому:

  • Используйте понимание списков для создания ваших списков (вместо for item in list
  • Настройте ширину столбца на основе фактического максимального списка, как показано ниже
column_length = max([len(word) for word in list_of_words])
0 голосов
/ 03 февраля 2019

Вы можете использовать форматирование строки, используя Спецификация формата Mini-Language .

Например:

for i in range(len(entries)):
    print("{0:>6.2f}\t{1:>6.2f}\t{2:>6.2f}\t{3:>6.2f}".format(*entries[i]))

Вы получите что-то вроде этого:

Wind Speed  Old Formula New Formula Difference

  5.00    9.00    4.00    5.10
  6.00    5.00    2.00    2.80
  7.00    2.00    1.00    0.80
  8.00   -1.00    0.00   -1.10
  9.00   -3.00    0.00   -2.80
 10.00   -5.00   -1.00   -4.30
 11.00   -7.00   -2.00   -5.70

Или, используя более питоническую петлю:

for entry in entries:
    print("{0:>6.2f}\t{1:>6.2f}\t{2:>6.2f}\t{3:>6.2f}".format(*entry))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...