문제

맵을 올바르게 사용하려고했고 목록이 비어 있지 않은지 확인하기 위해 IF 문과 IF 문을 사용했습니다. 입력도 표시하겠습니다. 설명을 위해 Numbers_1 함수는 맵 옵션을 사용한 곳입니다. 이 작업을 수행하려면 무엇을 편집해야합니까? 이 문제를 해결하는 방법에 대해 혼란 스러워요 내 코드는 아래입니다.

#this is the input file    
#John Jackson
#91 94 38 48 70 85 94 59
#James Johnson
#78 96 90 55 77 82 94 60
#Edward Kinsley
#99 94 82 77 75 89 94 93
#Mozilla Firefox
#49 92 75 48 80 95 99 98    
def lab8():
    userinput= "Lab8.txt"
    lenoffile= len(userinput)
    print "There is", lenoffile, "lines"
    File= open (userinput, "r")
    studentscores1= File.read()
    studentlist= studentscores1.split("\n")
    return studentlist, lenoffile
def Names_1(studentlist, lenoffile):
    print "=============================="
    ai = ""
    for i in range (0, lenoffile, 2):
        ai += studentlist[i] + "\n"
    print "===============below is ai=========="
    print ai
    return ai
def Numbers_1(studentlist, lenoffile):    
    bi= ""
    for i in range (1, lenoffile, 2):
        bi += studentlist[i] + "\n"
    bi = bi.split ("\n")
    print bi
    return bi
    print "====================BELOW IS THE SCORE========================="
def Outputfile_1(ai):
    outputfile= raw_input ("What is the output file.txt:")
    File2= open(outputfile, "w")
    File2.write(ai)
    return outputfile

def numbers_1(bi):
    for b1 in bi:
        b1 = b1.split(" ")
        lenofb1 = len(b1)
        quiztotalb = 0
        midtermb = 0
        Final = 0
        if lenofb1 > 0:
            b1 = map(int, b1)
            quiztotal = ((b1[0] + b1[1] + b1[2] + b1[3] + b1[4])/5)
            midtermtotal = ((b1[5]) + b1[6])/2
            Finaltotal = (b1[7])
            Score = (quiztotal*.3 + midtermtotal*.4 + Finaltotal*.3)
            print Score
def main():    
    studentlist, lenoffile = lab8()
    ai = Names_1(studentlist, lenoffile)
    bi = Numbers_1(studentlist, lenoffile)
    #outputfile = Outputfile_1(ai)
    numbers_1(bi)
main()

이것으로부터 나는 그것을 얻는다 ValueError: invalid literal for int() with base 10: ''나는 정말로 열심히 노력하고 있었고 여기서 어디로 가야하는지 잘 모르겠습니다.

도움이 되었습니까?

해결책

당신은 분할 중입니다 b1 단일 공간에서는 빈 값으로 이어질 수 있습니다.

>>> '88  89 '.split(' ')
['88', '', '89', '']

여기는 여분의 빈 줄입니다 int() 예외를 던지려면 :

>>> int('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

사용 str.split() ~와 함께 아니요 대신 논쟁; 그런 다음 여분의 공백이 제거됩니다.

>>> '88  89 '.split()
['88', '89']

코드에 다른 문제가 있습니다. 잘 살펴보십시오.

def lab8():
    userinput= "Lab8.txt"
    lenoffile= len(userinput)
    print "There is", lenoffile, "lines"
    File= open (userinput, "r")
    studentscores1= File.read()
    studentlist= studentscores1.split("\n")
    return studentlist, lenoffile

여기, lenoffile ~이다 ~ 아니다 파일의 줄 수. 문자 수입니다 'Lab8.txt'; 두 값 모두 일어나다 되려고 8, 그러나 해당 파일에서 일부 줄을 추가하거나 제거하면 나머지 코드에 대해 번호가 잘못됩니다.

이 숫자를 이름과 함께 유지하고 계산을 다시 작성하려면 작업을 수행해야합니다. 유지 함께 이름.

다음은 동일한 작업을 해결하기위한 대체 버전입니다.

outputfile = raw_input("What is the output filename? :")

with open('Lab8.txt') as infile, open(outputfile, 'w') as outtfile:
    for name in infile:
        scores = next(infile).split()  # next() grabs the next line from infile here
        scores = map(int, scores)

        quiztotal = sum(scores[:4]) / 5
        midtermtotal = sum(scores[5:7]) / 2
        finaltotal = scores[7]
        score = quiztotal * .3 + midtermtotal * .4 + finaltotal * .3

        outfile.write(name)
        outfile.write('{0:0.2f}\n'.format(score))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top