파이썬에서 파일 입출력 하는 코드를 짜는 문제를 푸는 중인데 어디서 틀렸는지 모르겠어요 ㅠㅠ

조회수 839회

![![![이미지][1]][1]][1]```python

inputfile=open("ALE.txt","r")

outputfile=open("ALE2.txt","w")

list1=[]

for line in inputfile:

Team,Won,Lost=line.split(',')
Won=int(Won)
Lost=int(Lost)
Percentage=round((Won)/(Won+Lost),3)
list1.append([Percentage,Team,Won,Lost])

list1.sort(reverse=True)

print("Team\tWon\tLost\tPercentage")

for i in range(len(list1)):

outputfile.write("{0:<10},{1:<10},{2:<10},{3:<10}".format(list1[i][2],list[i][3],list[i][4],list[i][0]))

inputfile.close() outputfile.close()


ALE 안에 있는 자료는 다음과 같아요. 문제에선 Percentage를 내림차순으로 정렬해야한다 해서 `list.sort(reverse=True)`를 넣었어요.

``` 문제의 의도는 ALE안의 자료를 위에 있는 사진처럼 ALE2에 옮겨야 해요. ALE의 내용은 밑에 있는 것과 같은데 줄과 줄 사이에는 원래 공백이 없어요.

Baltimore,93,69

Boston,69,93

New York,95,67

Tampa Bay,90,72

Toronto,73,89

어느 부분에서 틀렸고 고쳐야 하는 방법도 알려주시면 정말 감사하겠습니다. ㅠㅠ

1 답변

  • 질문을 하실 때 시도 방법, 결과, 예상 결과, 문제가 생겼다고 생각한 기준을 적어주시면 답변 드리기 쉽습니다. 아쉽게도 무엇이 안된다(문제가 생겼다고 생각한 기준)에 대한 내용이 없네요.

    일단 추측컨데 ALE2.txt 에 퍼센트와 Team Won Lost Percentage 이 파일에 출력되지 않은 것, 그리고 줄내림이 안되는 점의 해결 방법을 묻는 거라 생각합니다.

    퍼센트 문제

    일단 시작하기 전에 퍼센트는 [0, 100] 범위의 값으로 [0, 1] 범위의 값이 아닙니다. 이부분은 문제가 잘못된 부분이 있네요. 일단 이부분은 넘어가고 설명을 하겠습니다.

        Won=int(Won)
        Lost=int(Lost)
        Percentage=round((Won)/(Won+Lost),3)
    

    위 코드를 보시면 WonLost 는 정수(int) 입니다. 파이썬에서 정수 나누기 정수의 결과는 정수가 됩니다. 따라서 (Won)/(Won+Lost) 의 결과는 0 또는 1 이 됩니다.

    원하는 값인 실수 계산이 되기 위해서는 WonLost 가 실수 이면 됩니다. 그러므로 아래와 같이 수정하시면 됩니다.

        Won=float(Won)
        Lost=float(Lost)
        Percentage=round((Won)/(Won+Lost),3)
    

    헤더 미출력 문제

    Team Won Lost Percentage 헤더가 ALE2.txt 에 출력되야 하나 코드를 보면 아래와 같이 stdout 에 출력하는 것을 볼수 있습니다.

    print("Team\tWon\tLost\tPercentage")
    

    따라서 ALE2.txt 의 파일 객체인 outputfile 에 출력되도록 아래와 같이 작성하면 됩니다.

    outputfile.write("{:<10}{:<10}{:<10}{:<10}\n".format("Team", "Won", "Lost", "Percentage"))
    

    줄 내림 문제

    write() 는 한줄 내림을 자동으로 하지 않습니다. 따라서 직접 한줄 내림을 위한 \n 을 입력해 줘야합니다. 그리고 결과 사진에는 , 가 없으니 지워보겠습니다.

    for i in range(len(list1)):
    
        outputfile.write("{0:<10}{1:<10}{2:<10}{3:<10}\n".format(list1[i][1],list1[i][2],list1[i][3],list1[i][0]))
    

    첫 질문과 다르게 format(list1[i][2],list[i][3],list[i][4],list[i][0]) 이 부분이 잘못 작성되어 있어서 제가 임으로 수정하였습니다.

    결론

    위에서 언급한 수정 방법을 적용하면 아래와 같습니다.

    inputfile=open("ALE.txt","r")
    
    outputfile=open("ALE2.txt","w")
    
    list1=[]
    
    for line in inputfile:
    
        Team,Won,Lost=line.split(',')
        Won=float(Won)
        Lost=float(Lost)
        Percentage=round((Won)/(Won+Lost),3)
        list1.append([Percentage,Team,Won,Lost])
    
    list1.sort(reverse=True)
    
    outputfile.write("{:<10}{:<10}{:<10}{:<10}\n".format("Team", "Won", "Lost", "Percentage"))
    
    for i in range(len(list1)):
    
        outputfile.write("{0:<10}{1:<10}{2:<10}{3:<10}\n".format(list1[i][1],list1[i][2],list1[i][3],list1[i][0]))
    inputfile.close()
    outputfile.close()
    
    • 답변 감사합니다만, 문제의 의도는 ALE.txt안의 자료를 ALE2.txt로 옮기되, ALE.txt의 자료를 ALE2.txt에 이렇게 출력되게끔 해야해요. Team Won Lost Percentage Baltimore 96 66 0.593 New York 84 78 0.519 Toronto 83 79 0.512 Tampa Bay 77 85 0.475 Boston 71 91 0.438 알 수 없는 사용자 2018.5.26 21:50
    • 댓글이 잘리 긴 하였지만, 문제를 알려주시지 않으면 의도를 파악할 수가 없지요. 적어도 ALE.txt 의 내용이 어떤건지라도 알려주시면 좋겠어요. 유동욱 2018.5.26 21:58
    • 죄송합니다 ㅠㅠ 방금 수정 했어요. 알 수 없는 사용자 2018.5.26 22:20
    • 답변 수정했습니다. 유동욱 2018.5.26 23:11
    • 아앗 정말 감사합니다 ㅠㅠ 제가 이거 며칠동안 계속 고민하고 있었는데 속시원한 답변 감사드려요~ 다음부터는 조금더 체계적으로 질문 할게요! 알 수 없는 사용자 2018.5.26 23:36

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)