2017-11-26 2 views
0

영수증을 문자열 형식으로 작성한 다음 주 프로그램으로 다시 전달하여 인쇄합니다. 나는를위한 루프가이 작업을 수행하려고하지만 - 그들은 부동 소수점 값 목록에서 생성 된.format()을 사용한 여러 줄 문자열 들여 쓰기

food_prices = "\n22.40\n13.40\n" 
drink_prices = "\n11.50\n6.90\n" 

:

그래서, 나는 한 각각의 사이에서 \ n 인 가격을 포함하는 두 개의 문자열을 가지고 결코 일하게하지 마라. 영수증 문자열이 주 프로그램에 전달 된 이후에 내가받은 모든 것은 엄청나게 버그가있는 인쇄물이었습니다.

각 줄이 "\ n"으로 인해 줄 바꿈되어 오른쪽으로 16 개 공백으로 들여 쓰기되도록 .format()로 서식을 지정하려고합니다. 출력이 예상되는 것의 예는하기 :

123456789# For readability, ignore 
Food: 
      22.40 
      13.40 
Drinks: 
      11.50 
      6.90 
------------------------------ 
Total  54.20 

내가 시도하는 것 :

receipt = (... 
     "Food:\n" 
     "{:>16}" 
     "Drinks:\n" 
     "{:>16}" 
     "------------------------------\n" 
     "{:>7.2f}" 
     "Total {:>7.2f}\n").format(food_prices, drink_prices, total) 

출력의 모습 :

Food: 
12.4 
5.43 
7.65 
Drinks: 
    5.4 
8.76 
5.4 
------------------------------ 
Total  45.04 

들여 쓰기는 하나의 작업 않습니다 가격 ("\ n0.00 \ n"). 나는 이것이 어떻게 수행되어야하는지 정확히 모르겠습니다. 필자는 공식 문서 (및 PEP)를 참조하고 인터넷 검색을 수행했습니다.

답변

1

문자열이 편리한 형식이 아니므로 문자열 대신 목록을 사용합니다.

2이 작업을 수행하는 옵션입니다. 먼저 루프를 사용하여 문자열을 부분적으로 작성합니다. 두 번째는 len()을 사용하여 전체 패턴을 만드는 데 도움이됩니다.

food_prices = [22.40, 13.40] 
drink_prices = [11.50, 6.90] 

total = sum(food_prices + drink_prices) 


# Option 1 (in parts) 

summary = 'Food:\n' 

for item in food_prices: 
    summary += '{:>16.2f}\n'.format(item) 

summary += 'Drinks:\n' 

for item in drink_prices: 
    summary += '{:>16.2f}\n'.format(item) 

summary += '-' * 30 + '\nTotal {:>10.2f}\n'.format(total) 

print(summary) 


# Option 2 (all at once) 

summary = ('Food:\n' + '{:>16.2f}\n' * len(food_prices) + 
    'Drinks:\n' + '{:>16.2f}\n' * len(drink_prices) + 
    '-' * 30 + '\nTotal {:>10.2f}\n' 
    ).format(*food_prices, *drink_prices, total) 

print(summary) 

참고 : '-' * 30을 사용하여 수동 - 30 시간을 입력 저장합니다.