2012-09-26 3 views
-1

나는 while 루프를 사용하여 파이썬에서 곱셈 테이블을 구축 중입니다. 숫자가 늘어남에 따라 출력이 이상합니다. 테이블은 완성면에서 좋지만 추한 것처럼 보입니다. 마지막 3 개의 열을 어떻게 교정 할 수 있습니까? 나는 출력 사진을 게시 하겠지만 나는 새로운 사용자이고 그것은 나를 보내지 않을 것이다.파이썬 곱셈 테이블 오류

width = int(input("Please enter the width of the table:")) 
def print_times_table(width): 

    row = 0 
    col = 0 
    width += 1 
    spaces = ' ' 

    while row < width: 
     col = 0 
     while col < width: 

      print(row*col, spaces, end="") 
      col += 1 
     print("\n", end='') 
     row +=1 

print_times_table(width) 

출력 : 당신이 사진을 필요로하지 않는, http://i.stack.imgur.com/C9AzE.jpg

+1

을 (당신이, 중요하지 않습니다 원하는대로 번호를 사용할 수 있습니다)이 똑같은 인 경우 숙제, 당신은 그렇게 말해야합니다 ... – Triptych

답변

1

첫째; 당신은 단지 네 개의 공간을 들여 쓰기 (또는 {} 아이콘을 사용)에 의해 텍스트로 출력을 표시 할 수 있어야한다 :

Please enter the width of the table:4 
0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 
0 4 8 12 16 

문제는 각 번호가 같은 폭 될 것입니다 가정하고 있다는 점이다. 모든 것이 1 문자 폭이기 때문에 3x3까지 작동하지만 5x5의 경우 일부 문자는 하나의 문자이고 일부는 2 개입니다 (물론 10x10에서 더 악화됩니다).

쉽게 수정할 수있는 방법은 각 셀의 너비가 동일해야합니다.

먼저 가장 큰 크기를 계산해야합니다. 그러나 그것은 쉽습니다. 크기는 width*width입니다.

다음으로 숫자를 사용하여 여러 문자를 사용하는 방법을 알아야합니다. 파이썬에는이 작업을 수행 할 수있는 몇 가지 방법이 있습니다. 구식 필드 지정자를 사용하여이를 수행하는 방법을 보여 드리 겠지만,이를 새로운 스타일의 형식 문자열로 변환하는 방법을 살펴보아야합니다. (이것이 숙제 인 경우, 파이썬 3을 가르치는 누군가는 구식 필드 스펙을 사용하기 위해 당신을 등급 지어 줄 것입니다. 그것은 당신 자신의 자기 교육을 위해서라면 두 가지 방법 모두를 알아낼 가치가 있습니다.) 또는, 정적 '%4d' 사양을 작성하는 대신 가변 너비 형식 사양 ('%*d')을 사용하여 형식을 변환하는 방법을 살펴보아야합니다. (nneonneo의 대답은 그에게 단서를 제공해야합니다.) 이제

width = int(input("Please enter the width of the table:")) 
def print_times_table(width): 

    row = 0 
    col = 0  
    fieldspec = '%' + str(len(str(width * width))) + 'd' 
    width += 1 

    while row < width: 
     col = 0 
     while col < width: 

      print(fieldspec % (row*col,), ' ', end="") 
      col += 1 
     print("\n", end='') 
     row +=1 

print_times_table(width) 

는 당신이 얻을 :

Please enter the width of the table:4 
0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 
0 4 8 12 16 
+0

훌륭한 세부 사항! 다른 답변에서와 같이 변수 너비 필드 지정자를 사용하면이 방법이 조금 더 명확해질 것이라고 생각합니다. –

+0

@ SamMussmann : 사실 그것은 독자에게 좋은 또 다른 운동입니다. 나는 대답을 편집 할 것이다. – abarnert

0

사용을 가변 폭 필드 지정자 :

print('%*d' % (8, row*col), end='') 

을이 자동으로 충분히 패딩을 추가 숫자를 (여기) 8 칸까지 채우십시오. 이 간격 매개 변수를 인수로 전달할 수도 있습니다.

print('{:{width}}'.format(row*col, width=8), end='') 
0

가 왜 그냥 .ljust와 combonation에 변수를 사용

는 새로운 스타일의 서식 구문을 사용하여 가변 폭을 사용하려면? 그래서 같은 :

width = int(13) 
def table(width): 

row = 1 
col = 1 
width += 1 
spaces = ' ' 

while row < width: 
    col = 1 
    while col < width: 
     print(str(row*col).rjust(5, ' '), end="") 
     col += 1 
    print("\n", end='') 
    row +=1 

table(width) 

작동이 ... 그리고 당신의 숫자가 점점 얼마나 큰지에 따라 따라 조정