Frage

Ich habe versucht, MAP korrekt zu verwenden und zu verwenden, und wenn die Anweisung sicherstellt, dass die Liste leer war, um nicht fortzufahren und anzuhalten. Ich werde auch die Eingabe anzeigen. Zur Klärung hat die Funktion Numbers_1 die MAP -Option verwendet. Was müsste ich bearbeiten, um diese Funktion zu machen? Ich bin verwirrt darüber, wie ich dies beheben kann. Mein Code ist unten mein Code ist

#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()

daraus bekomme ich das ValueError: invalid literal for int() with base 10: ''Ich habe mich sehr sehr bemüht und ich bin mir nicht sicher, wohin ich von hier aus gehen sollte.

War es hilfreich?

Lösung

Sie teilen sich b1 auf einzelnen Räumen, und dies kann zu leeren Werten führen:

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

Es sind die extra leeren Saiten hier, die verursachen int() eine Ausnahme auswerfen:

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

Verwenden str.split() mit nein Argument stattdessen; Extra Whitespace wird dann ausgezogen:

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

Sie haben auch einige andere Probleme in Ihrem Code. Sich ansehen:

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

Hier, lenoffile ist nicht Die Anzahl der Zeilen in der Datei. Es ist die Anzahl der Zeichen in 'Lab8.txt'; Beide Werte passieren sein 8, Fügen Sie jedoch einige Zeilen aus dieser Datei hinzu oder entfernen Sie sie und die Nummer ist für den Rest Ihres Codes falsch.

Wenn Sie diese Zahlen mit den Namen zusammenhalten und die Berechnungen erneut schreiben sollen, müssen Sie einige Arbeiten erledigen Halten die Namen zusammen.

Hier ist eine alternative Version, um dieselbe Aufgabe zu lösen:

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))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top