2016-03-24 7 views
2

yazma okuma aşağıdadır: Program her öğrenci için bir sınav ortalamasını hesaplar ve bir tamsayı kullanarak matematik için o kadar yuvarlarCSV programlama Ben <code>CSV</code> öğrenci puanlarının listesini okur ve yapar bir program yazmaya çalışıyorum

ceil, daha sonra ismini ve sınav ortalamasını examScores.csv adı verilen başka bir csv dosyasına yazar ve maksimum puanın 5 puanı dahilindeki öğrencilerin puanları, örn. maksimum puan 98 ise, o zaman tüm puanlar> = 93 basılmalıdır.
0 - 59, 60 - 69, 70 - 79, 80 - 89, 90 - 100 arasında puan alan öğrenci sayısı (aralıkları takip etmek için, 5 numaralı sayaçlar listesini oluşturmalısınız; ilk aralığındaki bir sayıyı işlediğinizde, konumu 0, ikinci aralıkta, konum 1, vb.) güncellersiniz.

Bu konuda oldukça zor bir zaman geçiriyorum.

inpt1=open("grades.csv","r") 
outpt1=open("examscores.csv","w") 
studentname=[] 
studentlastname=[] 
gradeav=[] 
highav=0 
inpt1.readline() 

for line in inpt1: 
    data=line.split(",") 
    averages=math.ceil(data[2])+float(data[3])/2 
    studentname.append(data[0]) 
    studentlastname.append(data[1]) 
    gradeav.append(averages) 
inpt1.close() 
outpt1.close() 

işe matematik ceil fonksiyonu alamayan ve benim ek ilavesi de çalışmıyor: Ben bugüne kadar uydurulmuş ettik koddur. Bunu benim için kimsenin çözmesini istemedim, sadece bir ipucu ya da doğru yöne itmeye ihtiyacım var.

+0

Csv dosyalarının düzgün şekilde açılmasını ve okunmasını sağlayan, bu verileri bir listeye kaydeden ve listelerinde ortalamalar yapan konuları incelemenizi öneriyorum. Kodunuzda, hepsi burada yer alan 3 kişiden oluşan harika örneklerde açıklanan çeşitli hatalar var. Verilerinizi saklamak için sözlüklerin bir listesini kullanmak daha kolay olabilir, ancak bu çok karmaşık hale gelirse, teknik olarak bir grup ayrı liste ile yapışabilirsiniz. – Chris

cevap

0

Bir ipucu istediğinden beri, ona bir şans vereceğim.

Ayrıca, ad ve notları ayrı ayrı kaydettiğinizi unutmayın. Daha yararlı olan, bu değerleri tutarlı bir veri yapısında kaydetmektir. Liste listesini tercih ederim.

Dosya okuma, satır ayırma ve değer çıkarma ile başlayın. Ardından kayıtlara ekleyin.

records.append([average, last_name, first_name]) 

Döngüsün sonunda, kayıtları ilk sütuna göre azalan sırada sıralayın. İpucu: google "liste sıralanmış lambda python listesi". Sıralı listeden, maksimum ve o altındaki 5 puanı seçin. Bunu senin için bir egzersiz olarak bırakacağım.

Ayrıca, sıralı listeleri farklı aralıklara bölmek için de kullanabilirsiniz. İpucu: google "python bisect paketi".

Math.ceil ile sorunlar gelince,

average = math.ceil(0.5* (float(data[2]) + float(data[3]))) 

daha ipuçları ihtiyaç vardır bana bildirin deneyin. :-)

İlgili konular