基础篇 | 03 Python 应用 - 数据解析

完整代码展示:

# 原始数据
STUDENTS_TEXT = [
    '学号 姓名  语文  英语  数学',
    '1  A   90  80  100',
    '2  B   77  67  96',
    '3  C   85  100 90',
    '4  D   98  90  44',
    '5  E   60  72  66'
]

def main():
    # parse students from that array
    students = parseDataSets(STUDENTS_TEXT)
    print(students)

    '''
    Prints:
    [{'学号': '1', '姓名': 'A', '语文': 90.0, '英语': 80.0, '数学': 100.0},
     {'学号': '2', '姓名': 'B', '语文': 77.0, '英语': 67.0, '数学': 96.0},
     {'学号': '3', '姓名': 'C', '语文': 85.0, '英语': 100.0, '数学': 90.0}, 
     {'学号': '4', '姓名': 'D', '语文': 98.0, '英语': 90.0, '数学': 44.0},
     {'学号': '5', '姓名': 'E', '语文': 60.0, '英语': 72.0, '数学': 66.0}]
    '''

    # 找到姓名为A的同学的所有信息
    printStudentAdvance(students,'A')

    '''
    Prints:
    学号:1
    姓名:A
    语文:90.0
    英语:80.0
    数学:100.0
    '''

def parseDataSets(line):
    dataSets = line[1:]
# 循环推导式:会比普通写法提升执行效率,但跟Java、C++比,执行效率是很低的。
# 即使你编译为二进制,所以我们一般在产品中不用Python开发。如果你去看各个编程语言的
# 开发效率,Python基本是垫底的。
    students = [parseStudentRow(row) for  row in dataSets]

    return  students

def parseStudentRow(row):
    # via 'Tab' key separate numbers
    field = row.strip().split('\t')

    students = {

        '学号': field[0],
        '姓名': field[1],
        # 强制类型转换:转换为float类型
        '语文': float(field[2]),
        '英语': float(field[3]),
        '数学': float(field[4]),

    }

    return  students

def printStudentAdvance(students,studentName):
    for student in students:
        if student.get('姓名') == studentName:
            for key,value in student.items():
                print('{key}:{value}'.format(key = key,value= value))

        break


'''
main()函数作为我们的入口函数,如果main()通过模块导入,
那么它的名字是'__main__',依然要执行我们这个文件的main函数,
而不是导入的函数,这里做一个简单的保护
'''
if __name__ == '__main__':
    main()

note
大家看到整个函数的调用我并没有传入类型,Python是弱类型的开发语言,在运行时去判断它具体的类型,而在Java、C++里,调用函数必须对上函数类型的。这是Python和C++的本质区别。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值