function - 파이썬 array




오류 및 파이썬 매트릭스에 대한 출력 문제? (2)

귀하의 추적은 5 번 라인에서 문제가 발생했음을 알려줍니다.

for row in range(table):

... 그 라인의 어떤 것은 성공하지 못하고 다른 것을 정수로 해석하려고 시도합니다. range() 에 대한 문서 를 살펴보면 다음과 같이 표시됩니다.

범위 생성자에 대한 인수는 정수 (내장 int 또는 __index__ 특수 메서드를 구현하는 모든 객체) __index__ 합니다.

...하지만 table 은 정수가 아닙니다. 그것은 목록입니다. 목록 (또는 이와 유사한 항목)을 반복하고 싶다면 특별한 기능이 필요하지 않습니다. 간단히 말해서

for row in range:

잘 작동합니다.

range() 의 오용과는 별도로 함수에 또 다른 문제점이 있습니다. 이는 코드를 너무 많이 들여 쓰기했기 때문입니다. 이:

  if table is None:
    table=[]
    new_table=""
    for row in range(table):
       for val in row:
         new_table+= ("| "+val+" ")
    new_table+= "|\n"

... tableNone 이면 들여 쓰기 된 코드 만 실행합니다. 실제로 원하는 경우 table=[] 을 설정하는 것입니다. 이 두 가지 문제를 모두 해결하면 다음과 같은 이점이 있습니다.

def show_table(table):
    if table is None:
        table=[]
    new_table = ""
    for row in table:
        for val in row:
             new_table += ("| " + val + " ")
        new_table += "|\n"
    return new_table.strip("\n")

(또한 모든 들여 쓰기를 네 칸으로 바 꾸었으며 스타일을 개선하기 위해 여기저기서 공백을 추가했습니다.)

리스트 (예 : [['a'],['b'],['c']] )로 구성된 목록을 취하여 테이블로 출력하는 함수를 작성하고 있습니다. 라인과 공백이 정확히 같은 특정 출력 (예 : | a | b | )이 필요하기 때문에 예쁜 테이블을 사용할 수 없습니다.

여기 내 기능은 다음과 같습니다.

def show_table(table):
  if table is None:
    table=[]
    new_table=""
    for row in range(table):
       for val in row:
         new_table+= ("| "+val+" ")
    new_table+= "|\n"
  return new_table.strip("\n")

계속 오류가 발생합니다.

show_table([['a'],['b'],['c']])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in show_table
TypeError: 'list' object cannot be interpreted as an integer

왜 문제가 있는지 나는 잘 모르겠다. 또한 첫 번째 목록의 첫 번째 항목 만 출력하는 출력 오류가 발생했습니다. 누군가가이 오류를 없애고 제대로 출력 할 수 있도록 형식 함수를 사용하는 방법을 설명 할 수 있습니까?

고정 된 오류이지만 여전히 실패한 테스트 :

FAIL : test_show_table_12 ( .AllTests)

Traceback (most recent call last):
  File "testerl7.py", line 116, in test_show_table_12
    def test_show_table_12 (self): self.assertEqual (show_table([['10','2','300'],['4000','50','60'],['7','800','90000']]),'| 10   | 2   | 300   |\n| 4000 | 50  | 60    |\n| 7    | 800 | 90000 |\n')
AssertionError: '| 10| 2| 300|\n| 4000| 50| 60|\n| 7| 800| 90000|' != '| 10   | 2   | 300   |\n| 4000 | 50  | 60    |\n| 7    | 800 | 90000 |\n'
- | 10| 2| 300|
+ | 10   | 2   | 300   |
?     +++   +++     +++
- | 4000| 50| 60|
+ | 4000 | 50  | 60    |
?       +    ++    ++++
- | 7| 800| 90000|+ | 7    | 800 | 90000 |
?    ++++     +       + +

문제는 다음과 같습니다.

for row in range(table):

range 는 1, 2 또는 3 개의 정수를 인수로 사용합니다. 목록을 가져 가지 않습니다.

당신이 사용하고자하는 :

for row in table:

또한 들여 쓰기를 확인하십시오. 개행 추가가 더 들여 쓰기되어야하는 것처럼 보입니다.





format