Beispiel #1
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}")
Beispiel #2
0
import easygraphics.dialog as dlg


def cals_sales_price(price):
    sales = 0.9 * price
    return sales


price = int(dlg.get_string("请输入原始价格:"))
sales_price = cals_sales_price(price)
dlg.show_message(f"打折后价格为{sales_price}")
Beispiel #3
0
import easygraphics.dialog as dlg


def calc_discount(total):
    """
    计算折扣数和折后金额

    :param total: 购物金额
    :return: 折扣数,折后金额
    """
    if total < 0:
        raise ValueError('total should not < 0!')
    if total >= 500:
        discountRate = 0.9
    elif total >= 200:
        discountRate = 0.95
    amount = total * discountRate
    return discountRate, amount


total = float(dlg.get_string("请输入总金额"))
dis_rate, amount = calc_discount(total)
dlg.show_message(f"折扣率为{dis_rate},折后金额为{amount}")
Beispiel #4
0
    return scores


def find_by_id(scores, id_key):
    """
    在scores列表中查找id等于id_key的元素

    :param scores: scores列表
    :param id_key: 要查找的id关键字
    :return: 找到的元素;None表示未找到
    """
    for s in scores:
        if s.id == id_key:
            return s
    return None


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

scores = read_csv(filename)
dlg.show_objects(scores)
id = int(dlg.get_string("请输入要查找的id"))
found = find_by_id(scores, id)
if found is None:
    dlg.show_message(f"找不到id为{id}的学生")
else:
    dlg.show_message(f"id: {found.id} 姓名: {found.name} 成绩:{found.score}")
            clazz = row[2]
            math = int(row[3])
            literacy = int(row[4])
            english = int(row[5])
            score = Score(id, name, clazz, math, literacy, english)
            scores.append(score)
    return scores


def score_to_total(score):
    return score.math + score.english + score.literacy


def filter_by_class_base(score, clazz):
    return score.clazz == clazz


filename = dlg.get_open_file_name("请选择数据文件", dlg.FileFilter.CSVFiles)
if filename == "":
    print("未选择文件")
    exit(-1)
scores = read_csv(filename)

my_clazz = dlg.get_string("请输入班级名称")
filter_by_class = partial(filter_by_class_base, clazz=my_clazz)
lst1 = filter(filter_by_class, scores)
lst2 = list(map(score_to_total, lst1))
total = sum(lst2)
count = len(lst2)
average = total / count
print(f"{my_clazz}班{count}名同学三科平均分为{average:.2f}")
Beispiel #6
0
from easygraphics.dialog import get_string
import random

MAX_SCORES = [30, 20, 30, 15, 5]


def check_max_scores(MAX_SCORES):
    m = sum(MAX_SCORES)
    if m != 100:
        raise ValueError("总分必须为100")


try:
    score = int(get_string("请输入总分:"))
except:
    raise ValueError("总分必须为整数!")

n = len(MAX_SCORES)
scores = [0] * n

for i in range(n):
    scores[i] = score * MAX_SCORES[i] // 100

remain = score - sum(scores)

rnd_lst = list(range(n))
while remain > 0:
    i = random.choice(rnd_lst)
    if MAX_SCORES[i] - scores[i] >= 2:
        scores[i] += 1
        remain -= 1
Beispiel #7
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}的学生")
from pathlib import Path
from easygraphics import dialog as dlg


def find_in_dir(path, key):
    results = []
    for entry in path.iterdir():  # 遍历目录中的所有条目
        if entry.is_dir():  # 如果是子目录
            results0 = find_in_dir(entry, key)  # 递归在子目录中查找
            results.extend(results0)  # 将查找结果并入结果集
        if entry.is_file():  #如果是文件
            if entry.name.find(key) != -1:
                results.append(str(entry.resolve()))  # 找到一个,加入结果集
    return results


dir_path = dlg.get_directory_name("请选择文件夹")
s = dlg.get_string("请输入要查找的关键字:")

dir = Path(dir_path)
results = find_in_dir(dir, s)
for file in results:
    print(file)
Beispiel #9
0
        final_clip.to_videofile(os.path.join(root_dir, fr'{title}.mp4'),
                                fps=24,
                                remove_temp=False)  # 生成目标视频文件
        print(f'>>>>>视频合并完成!')
    else:
        print('>>>>>视频下载完成!')  # 视频只有一段则直接打印下载完成
    print()


if __name__ == '__main__':
    os.system('cls')
    print('-' * 30 + 'B站视频下载小助手' + '-' * 30)
    print(welcome)
    print('>>>>>获取视频地址...')
    desktoppath = os.path.join(os.path.expanduser("~"), 'Desktop')
    start = dlg.get_string(message='请输入您要下载的B站av号或视频链接地址',
                           title='BilibiliDownload')
    start = start if start.isdigit() else re.search(r'/av(\d+)/*',
                                                    start).group(1)
    start_url = 'https://api.bilibili.com/x/web-interface/view?aid=' + start

    headers = {
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
        'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    html = requests.get(start_url, headers=headers).json()
    data = html['data']
    video_title = data["title"].replace(" ", "_")
    cid_list = []
    if '?p=' in start:
        p = re.search(r'\?p=(\d+)', start).group(1)
import easygraphics.dialog as gui

s = gui.get_string("your name:")
gui.show_message(f"hello {s}")
Beispiel #11
0
import easygraphics.dialog as dlg


def calc_sales_price(price):
    if price < 0:
        raise ValueError("price should not < 0!")
    sales = 0.9 * price
    return sales


try:
    price = float(dlg.get_string("请输入价格:"))
    sales_price = calc_sales_price(price)
    dlg.show_message(f"打折后价格为{sales_price}")
except ValueError as e:
    print("出现错误", e)
finally:
    print("我总会被执行")
Beispiel #12
0
import easygraphics.dialog as gui
import math


def sqrt(a, epsilon):
    k = 0
    xk = a
    while True:
        k += 1
        xk1 = xk
        xk = (xk1 + a / xk1) / 2
        if math.fabs(xk - xk1) < epsilon:
            break
    root = xk
    return xk


ep = 0.0001
a = float(gui.get_string("请输入a:"))
root = sqrt(a, ep)
gui.show_message(f"{a}的平方根是{root}")
        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]}")