成绩排序(python)

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

分析:

用到的知识:
1.sorted函数(这是一个稳定的排序方法)
sorted( iterable, key, reverse)
(1)iterable:是可迭代类型的数据;
(2)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;(一般用key=lambda x:x[i] ,lambda x:x[i] 是一个匿名函数,i为几就是第几个数字,如果是用的字典x[0]就是按照字典的key排序,x[1]就是按照字典的value排序 )
(3)reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列False(即默认从小到大排序)
2.join()函数
'sep'.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
意思就是以sep作为分隔符,将seq所有的元素合并成一个新的字符串
比如 ’ '.join(new)就是以空格作为分隔符,将new里面的元素合并为一个新的字符串
正确代码

import math
import os
try:
    while True:
        n=int(input())
        flag=int(input())
        keys = []
        for i in range(n):
            s=str(input())
            value = s.split(' ',1)
            keys.append(value)
        if(flag==0):
            new=sorted(keys, key=lambda d: int(d[1]),reverse=True)
            for i in range(n):
                print(' '.join(new[i]))
        else:
            new=sorted(keys, key=lambda d: int(d[1]),reverse=False)
            for i in range(n):
                print(' '.join(new[i]))
except:
    pass

错误写法分析:

看到题目第一想法就是写字典,然后运行发现,采用字典的话,如果有相同名字的人,那么会前一个人的成绩会被后一个人覆盖
错误写法(注意):
ac40%

import math
import collections
try:
    while True:
        n=int(input())
        flag=int(input())
        dict1 = collections.OrderedDict()  #这种写法可以避免字典乱序,避免每次编译之后字典种元素的位置不一样
        key = []
        for i in range(n):
            s=str(input())
            value = s.split(' ',1)#利用空格将字符串分开放进字典
            dict1[value[0]]=value[1]
            key.append(value[0])
        if(flag==0):
            new=collections.OrderedDict(sorted(dict1.items(), key=lambda d: int(d[1]),reverse=True))#排序函数
            for i in new.keys():
                print(i,new[i])
        else:
            new=collections.OrderedDict(sorted(dict1.items(), key=lambda d: int(d[1]),reverse=False))
            for i in new.keys():
                print(i,new[i])
except:
    pass
### 使用Python连接数据库并实现学生成绩排序 为了使用Python连接到MySQL数据库并对学生成绩进行排序,可以采用如下方法: #### 导入必要的库 首先需要导入用于建立与MySQL服务器通信所需的模块。通常会使用`pymysql`或更级别的ORM框架如SQLAlchemy来简化这一过程。 ```python import pymysql from sqlalchemy import create_engine, Column, Integer, String, Float from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker ``` #### 连接至数据库 创建一个引擎实例以指定要使用的数据库及其URL,并通过Session类管理对话。 ```python engine = create_engine('mysql+pymysql://username:password@localhost/db_name') Base = declarative_base() Session = sessionmaker(bind=engine) session = Session() ``` 此处需替换`username`, `password`, 和`db_name`为实际的用户名、密码和数据库名称[^3]。 #### 定义表结构映射模型 定义表示学生记录的数据模型,这有助于后续执行CRUD操作时更加直观方便。 ```python class Student(Base): __tablename__ = 'students' id = Column(Integer, primary_key=True) name = Column(String(50)) score = Column(Float) def __repr__(self): return f"<Student(name='{self.name}', score={self.score})>" ``` 此部分假设存在名为`students`的表格,其中包含字段:id (整数), :name (字符串) 及 :score (浮点数)[^2]。 #### 执行查询并排序 利用已有的会话对象(session),可以通过编写SQL表达式来进行复杂查询;对于简单的升序/降序排列,则可以直接调用order_by()函数。 ```python # 获取按分数降序排列的学生列表 sorted_students_desc = session.query(Student).order_by(Student.score.desc()).all() for student in sorted_students_desc: print(f"{student.name}: {student.score}") ``` 上述代码片段展示了如何按照学生的成绩到底获取所有记录,并打印出来[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值