對數據按等級分類

要求: 一個數n,如果:

  1. n > 9, n為A類

  2. n < 9 and n > 8, n為B類

  3. n < 8 and n > 7, n為C類

  4. n <7 and n > 6, n為D類

  4. n < 6, n為E類

使用if-else結構必然是能夠完成要求的,但是顯得不夠優雅,不妨嘗試一下如下方法:

1. 使用zip打包數據

def grade(score):
    grades = list(zip("ABCD", (9, 8, 7, 6)))
    return next((grade for grade, limit in grades if score >= limit), "E")


print([grade(9), grade(5), grade(7)])

輸出結果:

['A', 'E', 'C']

解釋:

  使用zip()函數對數據和類型打包為元組對,然後把元組對打包為一個列表,如果查看grades裡面的內容就會使如下:

[('A', 9), ('B', 8), ('C', 7), ('D', 6)]

  這時候去通過數值去判斷對應的類型,如果不在這中間,說明是比6還要小的,則為E類.在這個地方使用了列表解析,我在前面的文章中對此有過比較詳細的說明,如果不懂,可以去看一下: 列表解析,集合解析,字典解析,

2. 使用字典包裝數據:

grades = {"A": 9, "B": 8, "C": 7, "D": 6}

def convert_grade(src):
    for ltrgrd, numgrd in grades.items():
        if src >= numgrd:
            return ltrgrd
    return "E"


print(convert_grade(5))

這個代碼非常簡單,就不做多餘的說明.

原文地址:https://www.cnblogs.com/ltozvxe/p/12868476.html