簡體   English   中英

將一個列表中的字符串與另一個列表中的整數“配對”的最簡單方法是什么(在python中)?

[英]What is the easiest way “pair” strings in one list with integers in another (in python)?

我正在做一個學校項目,該項目必須將人的姓名和他們各自的分數存儲在列表中的測試中,以便我可以操縱它來查找平均值,並打印出每個人的分數及其姓名。 對Python來說相對較新,因此可以提供任何幫助:)

我建議使用字典。 這會將鍵(學生的姓名)與值(測驗的分數)配對。 下面是一個示例,可為您提供所需的輸出。

import math

student_scores = {}

student_scores['Rick'] = 89
student_scores['Pat'] = 79
student_scores['Larry'] = 82
score_list = []

for name, score in student_scores.items():
         score_list.append(score)
         print(name.title() + "'s score was: " + str(score) + '%')

sum_scores = sum(score_list)
division_scores = len(score_list)
average_score = sum_scores / division_scores
print('The average score was {0:.2f}%'.format(average_score))
  1. 我創建了一個空字典,您將使用該字典將學生姓名和分數添加到列表中。 因此,在字典(student_scores)中,學生名“ Rick”將是一個鍵,分數89將是該值。 我為另外2名學生做這件事,將他們的名字與他們獲得的分數配對。

  2. 我創建一個名為score_list的空列表。 稍后,您將使用此列表將所有分數的總和相加,然后除以總分數的數量即可得出測試的平均分數。

  3. 我們開始一個for循環,該循環遍歷字典中的每個鍵和值。 對於每個分數,我們將其附加到空白分數列表中。 對於每個姓名和分數,我們會打印一條消息,顯示學生在考試中得到了什么。

  4. 現在,我們已將分數添加到字典中,我們可以使用sum方法來獲取分數列表中所有分數的總和。 我們將其放在一個名為sum_scores的變量中。 我們還通過找到列表的長度來獲得列表中分數的數量(在本例中為3,因為我在其中輸入了3個分數)。 我們會將其存儲在一個名為division_scores的變量中(因為我將所有分數的總和除以記錄的分數數)。 我們創建一個稱為average_score的變量,該變量是分數總和除以觀察總數的結果。

  5. 然后,我們使用.format()方法打印平均得分。 我們只是格式化平均分數,以便您將其擴展到小數點后兩位{0:.2f}%。

您的輸出如下:

Rick's score was: 89%
Pat's score was: 79%
Larry's score was: 82%
The average score was 83.33%

上面的答案是用於配對字符串的很好的數據結構。 在簡單的情況下,它將使您走上正確的道路,以枚舉分數,平均值等。

存儲關系的另一種方法是使用類(或底部的元組!)。下面是OOP方法的粗略概圖。

最重要的部分是

  1. ExamAttempt類的屬性存儲信息(名稱,分數)

  2. Exam.record_attempt方法中,從ExamAttempt類創建一個新的ExamAttempt對象,並將其添加到Exam對象的attempts列表中。

從這里,您可以輕松添加其他功能。 如果您全力以赴,則可能要對Question and Answer建模,也可能對Student對象建模。 如果您存儲問題和答案以及每個學生選擇的答案,則可以開始進行諸如拋出問題,對曲線評分,發現要拋出的問題等操作。OOP方法使擴展諸如繪圖之類的功能變得更加容易各種奇特的圖形,導出為CSV或Excel等。

並非下面的所有代碼都是必需的..可以將其完全簡化或完全重新構想,但是希望這可以使您有足夠的機會開始尋找這條路。 即使現在看起來很復雜,也沒有那么糟,這是您最終想要做的(無論如何使用Python!)

class ExamAttempt:
    def __init__(self, id, name, correct, total):
        self.id = id
        self.name = name
        self.correct = correct
        self.total = total
        self.score = (self.correct / float(self.total))

    def __repr__(self):
        return "<ExamAttempt: Id={}, Student={}, Score={}>".format(self.id, self.name, self.score)

class Exam:
    def __init__(self, name, questions):
        self.name = name
        self.attempts = []
        self.questions = questions
        self.num_questions = len(questions)

    def __str__(self):
        return "<Exam ({})>".format(self.name)

    def load(self, filename):
        pass

    def saveAttemptsToFile(self, filename):
        pass

    def record_attempt(self, student_name, num_correct):
        id = len(self.attempts) + 1
        self.attempts.append(
            ExamAttempt(id, student_name, num_correct, self.num_questions))

    def get_student_attempt(self, student_name):
        for att in self.attempts:
            if student_name == att.name:
                return att

    def get_average_score(self):
        return "homework" 

    def get_results_by_score(self):
        return sorted(self.attempts, key=lambda x: x.score, reverse=True)

    def get_attempts_by_name(self):
        return sorted(self.attempts, key=lambda x: x.name)

if __name__ == '__main__':
    questions = ['Question?' for i in range(100)] # Generate 100 "questions" = 100%
    exam = Exam('Programming 101', questions)
    data = [('Rick', 89), ('Pat', 79), ('Larry', 82)]

    for name, correct in data:
        exam.record_attempt(name, correct)

    for attempt in exam.get_results_by_score():
        print("{} scored {}".format(attempt.name, attempt.score))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM