def find_max_score(scores):
    """
    寻找并返回scores列表中成绩最高的学生信息

    :param scores: scores列表
    :return: 最高分同学信息
    """
    max_score = scores[0]
    for score in scores:
        if score.score > max_score.score:
            max_score = score
    return max_score


# 读取文件
filename = dlg.get_open_file_name("选择要打开的文件", dlg.FileFilter.CSVFiles)
if filename == '':
    print("未选择文件")
    exit(-1)

scores = read_csv_file(filename)

dlg.show_objects(scores)

max_score = find_max_score(scores)

dlg.show_message(
    f"获得最高分的同学:{max_score.id} {max_score.name},成绩为{max_score.score}")
Ejemplo n.º 2
0
            sales.append(sale)
    return sales


def calc_sales_total(sales):
    """
    计算销售总额

    :param sales: 销售记录列表
    :return: 销售总额
    """
    total = 0
    for s in sales:
        amount = s.price * s.quantity
        total += amount
    return total


filename = dlg.get_open_file_name("请选择csv文件", dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件!")
    exit(-1)

sales = read_csv(filename)

dlg.show_objects(sales)

total = calc_sales_total(sales)

dlg.show_message(f"销售总额{total}")
Ejemplo n.º 3
0

def filter_by_year(stocks, year):
    """
    筛选出指定年份的股票信息

    :param stocks: 股票信息列表
    :param year: 年份
    :return: 指定年份的股票信息列表
    """
    result = []
    for s in stocks:
        if s.pdate.year == year:
            result.append(s)
    return result


props = 'pdate,pclose,high,low,popen,last_price,change,change_percent,turnover_rate,volume,amount,cap,tradable_cap'.split(
    ',')
prop_names = '日期,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值'.split(',')

filename = dlg.get_open_file_name("请选择股票csv文件", dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件")
    exit(-1)

stocks = read_csv(filename)
dlg.show_objects(stocks, fields=props, field_names=prop_names)
filtered = filter_by_year(stocks, 2014)
dlg.show_objects(filtered, fields=props, field_names=prop_names)
Ejemplo n.º 4
0
def find_using_index(index,name_key):
    """
    使用index索引列表,查找姓名等于name_key在scores列表中的下标
    :param index: 索引列表
    :param name_key: 要查找的姓名
    :return: 姓名为name_key的学生。None表示找不到。
    """
    i_index = hash(name_key) % MAX_INDEX_SIZE
    items=index[i_index]
    for item in items:
        if item.key == name_key:
            return item.student
    return None

#5-2-2.成绩.csv
filename = dlg.get_open_file_name("请选择成绩csv文件",dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件")
    exit(-1)

students = read_csv(filename)
dlg.show_objects(students)
index = create_index(students)
name = dlg.get_string("请输入要查找的姓名")
found = find_using_index(index,name)
if found is None:
    dlg.show_message(f"找不到姓名为{name}的学生")
else:
    dlg.show_message(f"id: {found.id} 姓名: {found.name} 成绩:{found.score}")
Ejemplo n.º 5
0

class UserInfo:
    def __init__(self, id_, username, name, gender, Tel, password, mail, rank):
        self.id = id_
        self.username = username  # 用户名
        self.name = name  # 用户姓名
        self.gender = gender
        self.Tel = Tel
        self.password = password
        self.mail = mail
        self.rank = rank  # 用户级别


filename = 'ex2-1.用户信息.csv'
with open(filename, 'r', encoding='utf-8') as file:
    userls = csv.reader(file)
    next(userls)
    users = []
    for u in userls:
        id_, username, name, gender, Tel, password, mail, rank = u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7]
        user = UserInfo(id_, username, name, gender, Tel, password, mail, rank)
        users.append(user)


print('id, 账号, 姓名, 性别, 电话号码, 密码, 邮箱, 用户级别')
for s in users:
    print(s.id, s.username, s.name, s.gender, s.Tel, s.password, s.mail, s.rank)

dialog.show_objects(users, title='用户信息', width=1500, height=900)
Ejemplo n.º 6
0
    """
    从csv中读取学生信息,并以学号为关键字存入字典中
    :param filename: csv文件名
    :return: 以学号为关键字的学生信息字典
    """
    scores = {}
    with open(filename, mode="r", encoding="UTF-8") as file:
        reader = csv.reader(file)
        next(reader)
        for row in reader:
            id = row[0]
            name = row[1]
            score = Decimal(row[2])
            s = Score(id, name, score)
            scores[id] = s
    return scores


filename = dlg.get_open_file_name("请选择学生成绩文件", dlg.FileFilter.CSVFiles)
if filename == "":
    print("未指定文件")
    exit(-1)
scores = read_csv(filename)
dlg.show_objects(list(scores.values()))

id = dlg.get_string("请输入要找的学号")
if id in scores:
    s = scores[id]
    dlg.show_message(f"id: {s.id} 姓名: {s.name} 成绩:{s.score}")
else:
    dlg.show_message(f"找不到id为{id}的学生")
Ejemplo n.º 7
0
            score = Score(id, name, clazz, math, literacy, english)
            scores.append(score)
    return scores


def key_math(score):
    return score.math


def key_literacy(score):
    return score.literacy


def key_english(score):
    return score.english


filename = dlg.get_open_file_name("请选择数据文件", dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件")
    exit(-1)
props = ['id', 'name', 'clazz', 'math', 'literacy', 'english']
prop_names = ['学号', '姓名', '班级', '数学', '语文', '英语']
scores = read_csv(filename)
scores = sorted(scores, key=key_math, reverse=True)
dlg.show_objects(scores, fields=props, field_names=prop_names)
scores = sorted(scores, key=key_literacy, reverse=True)
dlg.show_objects(scores, fields=props, field_names=prop_names)
scores = sorted(scores, key=key_english, reverse=True)
dlg.show_objects(scores, fields=props, field_names=prop_names)
Ejemplo n.º 8
0

class Score:
    def __init__(self, id_, name, class_, math, literature):
        self.id = id_
        self.name = name
        self.class_ = class_
        self.math = math
        self.literature = literature


filename = 'ex2-2.scores.csv'
with open(filename, 'r', encoding='utf-8') as fr:
    scorels = csv.reader(fr)
    next(scorels)
    scores = []
    for s in scorels:
        id_, name, class_, math, literature = s[0], s[1], s[2], s[3], s[4]
        score = Score(id_, name, class_, math, literature)
        scores.append(score)

sum_math = sum_literature = 0  # 初始化数学和语文成绩的和
for score in scores:
    sum_math += float(score.math)
    sum_literature += float(score.literature)
avg_math = sum_math / len(scores)  # 数学平均成绩
avg_literature = sum_literature / len(scores)  # 语文平均成绩
print(f'所有同学的数学平均成绩是{avg_math:.2f},语文平均成绩是{avg_literature:.2f}。')

dialog.show_objects(scores, title='成绩信息', width=1080, height=720)
        if index.name == key_name:
            return index.index
        elif index.name < key_name:
            start = mid+1
        else:
            end = mid - 1
    return -1

# 从csv文件中读入学生成绩信息,放到scores列表中
# 5-2-1.成绩.csv
filename = dlg.get_open_file_name("请选择成绩csv文件",dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件")
    exit(-1)

scores = read_csv(filename)
dlg.show_objects(scores,fields=['id','name','clazz','math','literature','english'])

# 创建姓名的折半查找索引
name_indices = create_indices(scores)
dlg.show_objects(name_indices)


# 使用折半查找索引进行查找
key = dlg.get_string("请输入要查找的姓名")
i = find_using_index(name_indices,key)
if i == -1:
    dlg.show_message(f"找不到姓名为{key}的学生")
else:
    dlg.show_message(f"找到了!是{scores[i]}")