2016-04-02 22 views
0

sorunu var, kullanıcının 3 sınıftan seçebileceği bir sınav var. Daha sonra sınavı tamamlamaya devam ederler ve şu anda isimleri ve skorları doğru sınıf için bir metin dosyasına kaydedilir (3 farklı sınıf için 3 farklı dosya vardır). ama aynı kullanıcı sınavı tamamladıysa nasıl kazanabilirim ki, öğrencinin elde ettiği son 2 puanın tüm skorlardan ziyade dosyaya kaydedilmiş olması.son sonuçları bir metin dosyasında kaydetme

if classChoice ==1: 
     File=open("A.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 

if classChoice ==2: 
     File=open("B.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 
if classChoice ==3: 
     File=open("C.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 
+0

Yani, _append_ puanınızı almak istemiyorsunuz, ama onları _overwrite_ yapmak istiyorsunuz? – MrP01

+0

@ MrP01 Diğer kullanıcının önceki sicillerini istemediklerini, ancak siperin silinmesini istedim, ancak eğer kullanıcı zaten 2 defadan fazla bir test yapsaydı, o zaman en az 2 puanlık bir skor attı –

cevap

0

Verilerinizi, sizin tarafınızdan tanımlanan belirli bir veri yapısına kaydetmek istediğiniz açıktır. Durumunuzda, belirli bir öğrencinin sadece son iki puanını kaydetmekle ilgileniyorsunuz.

senin dosyası "a.txt" göz nasıl yaptığını gözlemlemek edelim:

John 90

Sam 80

Alice 100

Sam 90

John , 100

Her seferinde metin eklemek yerine, önce tüm dosyayı ve sözlük gibi çalışabileceğiniz bir şeye dönüştürün. Ben convert_file_to_dict('A.txt') arayacağım eğer Bizim durumumuzda

def convert_file_to_dict(path): 
    d = {} 
    lines = open(path).splitlines() 
    for line in lines: 
    name, grade = line.split(',') 
    if name in d: 
     d[name].append(grade) 
    else: 
     d[name] = [grade] 
    return grade 

, ben { 'John':['90','100'], 'Sam':['80','90'], 'Alice':['100'] } oluşur sözlüğü alacaktır. Not listesindeki sıralamanın "A.txt" satır sırasına göre korunduğuna dikkat edin.

Şimdi bu sözlükle yalnızca son 2 sınıflarda tutulmasını kontrol edebilir:

def insert_new_grade(grades_dict, name, grade): 
    if name in grades_dict: 
    if len(grades_dict[name]) == 1: 
     grades_dict[name].append(str(grade)) 
    else: 
     grades_dict[name] = grades_dict[name][1:] + [str(grade)] 
    else: 
    grades_dict[name] = [str(grade)] 

Şimdi tek ihtiyacınız olan bir dosyaya bu dicti dönüştüren bir fonksiyon yazmaya ... Sen isteyebilirsin * collections.defaultdict gibi yararlı nesneleri kullanmak için, ama ben burada overkill istemedim ...

+0

. Ben bunu minve içine uygulayacağım ve ordunun düşüneceğini düşünmüyorum çünkü nasıl dürüst olacağımı anlamıyorum. gibi her hangi bir sınıf deyiminde –

+0

ifadesini koydum, kodun hangi kısımlarının aslında benim için kaydedilen e-skorlar için koduma eklemem gerekiyor. sonra öğretmen için bir işlev olacak sonra() görmek için sınıf seçebilir ve puanları yazdırılır, böylece –

+0

dosyalarına yazdıktan sonra hemen basılmasını istemiyorum. ????????? lütfen yardım –

İlgili konular