استخدام وظيفة الخريطة بشكل صحيح مع بيان if لبيثون

StackOverflow https://stackoverflow.com/questions/19824443

  •  05-07-2022
  •  | 
  •  

سؤال

حاولت استخدام الخريطة بشكل صحيح واستخدمت وإذا كانت عبارة للتأكد من أنه إذا كانت القائمة فارغة حتى لا تتوقف وتوقف. سأعرض الإدخال كذلك. للتوضيح ، وظيفة الأرقام_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