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}")
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}")
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}")
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}")
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
""" 从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)
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}")
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("我总会被执行")
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]}")