python练习

流程控制

Copy
''' 1. 用if分支完成猜数字游戏 -- 先通过键盘输入一个数字算作出题 -- 在键盘输入答案 -- 正确:猜对 | 误差3以内:接近了 | 误差外小值:太小 | 误差外大值:太大 ''' quest = int(input("输入一个数字完成出题:")) answer = int(input('输入你的答案:')) error = quest - answer if quest == answer: print('猜对') elif -3 < error < 3: print('接近了') elif error > 3: print('太大了') elif error < 3: print('太小了') ''' 2. 添加循环,让第1题可以循环完成多次猜字游戏 -- 一次循环完成一次出题和猜题 -- 当出题输入Q或q时结束游戏 ''' while True: #要求出题输入q退出,所以出题的这个变量值quest必须是字符串 quest = input("输入一个数字完成出题,输入q|Q退出:") end = ['q', 'Q'] if quest in end: break # 出题的变量之前已经定义了字符串,接下来要做的都是算数运算,所以不管是出题输入的值还是答案都要转换成数字 quest=int(quest) answer = int(input('输入你的答案:')) error = quest - answer if quest == answer: print('猜对') break elif -3 < error < 3: print('接近了') elif error > 3: print('太大了') elif error < 3: print('太小了') ''' 3. 在第二题基础上,完成一次出题可以最多进行三次猜题 -- 一次出题,进入猜题,猜对进入下一次出题 -- 猜错进入下一次猜题,最多错三次,三次全错自动进入下一次出题 ''' while True: quest = input("输入一个数字完成出题,输入q|Q退出:") end = ['q', 'Q'] if quest in end: break # 先定义一个计数器,目的是为了统计输入错误的次数,当计数器为3,则结束循环,进行上一层循环继续出题 count = 1 while count <= 3: quest = int(quest) answer = int(input('输入你的答案:')) error = answer - quest if error == 0: print('猜对') break elif -3 < error < 3: print('接近了') elif error > 3: print('太大了') elif error < 3: print('太小了') count += 1 #如果循环结束,表示count已经大于3,提供用户返回信息 else: print() print('你已输错3次,请重新输入')

列表的操作

Copy
''' 1.循环输入10条信息,如果输入的是自然数,就存放到名为nums的列表中,如果不是,就存放到名为strs列表中 -- nums中存放的数据都是int类型 -- strs中存放的都是字符串类型 -- 最终打印两个列表以及个列表的中元素的个数 ''' (方法一) nums = [] strs = [] count = 1 while count <= 10: res = input('请输入正整数或者字符串 ') if res.isdigit() == True: nums.append(int(res)) else: strs.append(res) count += 1 print('nums变量中存放的元素有%s个,%s' % (len(nums), nums)) print('strs变量量中存放的元素有%s个,%s' % (len(strs), strs)) (方法二) for i in range(10): info = input('请输入10条信息 ') if info.isdigit(): nums.append(int(info)) else: strs.append(info ) print(nums) print(strs) ''' 2.完成用list存放注册用户信息的功能:可以循环来完成注册,先输入账号,再输入密码,密码需要二次确认,两次密码一致才能往下进行注册, 如果不一致返回重新注册输入 -- 账号输入Q或q,退出整个程序 -- 账号成功,进行两次密码验证,验证失败直接进入下一次注册 -- 账号必须全部是英文字母3个长度及以上,密码必须是英文或数字3个长度及以上 -- 两次密码验证成功,就注册信息存放到列表中 -- 假设注册成功了Owen,123 | Zero,000两个信息,最终形成的注册结果为 [['Owen', '123'], ['Zero', '000']] ''' list_1 = [] # 先定义一个人空列表,空列表一定要写在while循环外面,如果写在while循环里面,则每次赋值回到while循环,则都会被重新赋值成空列表 while True: user = input('请输入账号,输入q/Q退出程序 ') if user == 'q' or user == 'Q': break if not user.isalpha() and len(user) >= 3: # 将满足条件的筛选出来并取反,那么接下来的条件都是成立的 print('注册不成功,请重新输入用户名') while True: pwd = input('请输入密码 ') if pwd: re_pwd = input('请再次输入密码 ') if pwd == re_pwd: info = [user, pwd] list_1.append(info) print('注册成功') break else: print('两次密码输入不一致,请重新输入密码 ') continue print(list_1)

字典的操作

Copy
''' 1.将几个指定字符串形成目标字符串 指定字符串:'I' | 'am' | 'you are a good boy' | '!' 目标字符串:'I am a good boy!' ''' first = 'I' second = 'am' third = 'you are a good boy' fourth = '!' third = third[8:] print('%s %s %s%s' % (first, second, third,fourth)) ''' 2.写出你可以想到的所有按要求格式输出列表的解决方案 指定列表:[1, 2, 3, 4, 5] 输出结果:[5, 4, 3, 2, 1] ''' list1 = [1, 2, 3, 4, 5] # # (一) print(sorted(list1, reverse=True)) # # (二) print(list(reversed(list1))) # # (三) print(list1[::-1]) # # reverse方法和sort方法需要先执行再输出 # # # (四) list1.reverse() print(list1) # (五) list1.sort(reverse=True) print(list1) ''' 3.遍历删除包含 Bi词汇(脏话) 的目标 指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO'] 输出结果:['Owen', 'ZeroS'] ''' #方法1: 匹配符合条件的,添加到新的列表(推荐) list1 = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO'] list2 = [] source=['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO'] res=[] for i in source: if 'SB' not in i: res.append(i) print(res) #反向遍历列表,不符合条件的,删除 for i in source[::-1]: if 'SB' in i: source.remove(i) print(source) ''' 4.求得指定元组中是字符串数据的总个数 指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9) 求的结果:3 ''' #方法1 ls = (1, 2, '3', '4', 5, '6', 7, 8, 9) list1 = [] for i in ls: if isinstance(i, str): list1.append(i) print(len(list1)) #方法2 ls = (1, 2, '3', '4', 5, '6', 7, 8, 9) list1 = [] count = 0 #符合条件的自加1,起到计数的作用 for i in ls: if isinstance(i, str): list1.append(i) count += 1 print('字符串个数为%s' % count) ''' 5.求得指定元组中 str数据的个数 与 int数据的个数,存储到字典存放 指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9) 求的结果:{'str': 3, 'int': 6} ''' # 方法1 tuple_refer=(1, 2, '3', '4', 5, '6', 7, 8, 9) dic={} inter=[] string=[] for i in tuple_refer: if isinstance(i,int): inter.append(i) else: string.append(i) num_int=len(inter) num_str=len(string) dic['str']=num_str dic['int']=num_int print(dic) #方法2 #定义计数器 count_str = 0 count_int = 0 #将元组转换为列表 tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9) tuple_list = list(tuple_refer) #判断字符串或者数字,如果判断到,就用各自的计数器自增1 for i in tuple_list: if isinstance(i, str): count_str += 1 else: count_int += 1 print(dict({'str': count_str, 'int': count_int})) #方法3 tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9) #使用fromkeys方法为空字典定义key,默认值都设置为0 res = {}.fromkeys(['str', 'int'], 0) #判断如果是字符串,就在'str'这个key的值加1 for i in tuple_refer: if isinstance(i, str): res['str'] += 1 else: res['int'] += 1 print(res) ''' 6.列表数据的去重 指定列表:[3, 1, 2, 2, 1, 5, 9, 7] 求的结果:[3, 1, 2, 5, 9, 7] ''' #方法1 list1=[3, 1, 2, 2, 1, 5, 9, 7] print(list(set(list1))) #方法2 -----> 定义一个新列表,然后遍历list1,将list1中的值取出来,判断是否包含在新列表list1_new中,如果不包含,就执行插入操作 list1=[3, 1, 2, 2, 1, 5, 9, 7] list1_new=[] for i in list1: if i not in list1_new: list1_new.append(i) print(list1_new) #方法3 list1 = [3, 1, 2, 2, 1, 5, 9, 7] dic = {}.fromkeys(list1, 0) dic_keys = dic.keys() res=list(dic_keys) print(res) ''' 7.回答字典能不能按索引取值?能不能切片?能去求长度?能否字典与字典拼接?成员运算判断的是key还是value ''' # 字典不能按索引取值和切片 #字典可以求长度 #字典不可以进行拼接 dic = {'name': 'bob', 'age': 18} dic3 = {'name2': 'bobbb', 'sex': 'male'} res=dic.copy() res.update(dic3) print(res) print(len(res)) #成员运算判断key print('name' in res) print('name2' in res) print('age' in res) print('sex' in res) ''' 8.修改所有以 Bi词汇(脏话) 开头或结尾的字符串,将 Bi词汇 替换为** 指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO'] 运行结果:['Owen', 'Bob**', '**en', 'ZeroS', 'OSBO'] ''' source = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO'] for v in source: if v.startswith('SB') or v.endswith('SB'): index = source.index(v) source[index] = source[index].replace('SB', '**') #修改source列表里切片里的一个字符串,列表无法用replace print(source)

函数练习

Copy
''' 1)具有进货功能1,销售车辆功能2,展示所有库存功能3,展示销售总业绩功能4 2)用户输入0退出系统,输入提供的功能编号,完成对应的功能,否则重新输入,eg:2就进入销售撤功能 3)车辆信息具有持久化(文件永久)存储功能,车辆有奔驰|宝马|奥迪三款 文件信息: total.txt: 就是记录了总销售额 car.txt: 宝马 120000 9 奔驰 150000 7 奥迪 100000 8 4)进货功能:选择进货的车型与数量,完成进货 5)销车功能:选择售出的车,有库存售出,更新销售总业绩,没有则进入进货功能 6)展示库存:显示所有车与库存两条信息即可 7)总业绩:显示总业绩金额即可 ''' # 读car.txt ''' { '宝马': [120000, 9] } { '宝马': {'price': 120000, 'num': 9} } ''' def read_car(): dic = {} with open('car.txt', 'r', encoding='utf-8') as f: for n_p in f: name, price, num = n_p.strip('\n').split(' ') dic[name] = [int(price), int(num)] return dic def write_car(dic): with open('car.txt', 'w', encoding='utf-8') as f: for k, v in dic.items(): info = "%s %s %s\n" % (k, v[0], v[1]) f.write(info) def choose_car(): while True: car = input('请选择车型 ') if car in ['宝马', '奔驰', '奥迪']: return car def choose_num(): while True: num = input('请输入数量 ') if num.isdigit() and int(num) > 0: return int(num) def read_total(): with open('total.txt', 'r', encoding='utf-8') as f: return int(f.read()) def write_total(total): with open('total.txt', 'w', encoding='utf-8') as f: f.write(str(total)) # 业绩 # 1.可读可写total.txt def grade(add_total=0): if add_total > 0: total = read_total() + add_total write_total(total) else: print(read_total()) # 库存 def hub(): print('库存功能') # 1.读car.txt car_dic = read_car() # 2.显示 for k, v in car_dic.items(): print(k + ' ' + str(v[1])) # 售车 def sell(): print('售车功能') # 1.读car.txt car_dic = read_car() # 2.选择车型 car = choose_car() # 3.选择数量 num = choose_num() # 4. 判断数量:进货 | 卖货 car_dic[car][1] -= num write_car(car_dic) # 5.判断数量:进货 | 卖货 if car_dic[car][1] < num: print('存活不足') stock() # 6.操作业绩 add_total = car_dic[car][0] * num grade(add_total) print('售车成功') # 进货 def stock(): print('进货功能') # 1.读car.txt car_dic = read_car() # 2.选择车型 car = choose_car() # 3.选择数量 num = choose_num() car_dic[car][1] += num # 4.写入car.txt write_car(car_dic) # 映射规则 method_map = { '1': stock, '2': sell, '3': hub, '4': grade } # 程序入口 def sys_start(): while True: cmd = input('''请输入: 1.进货 | 2.售车 | 3.库存 | 4.业绩 | 0.退出 >>>: ''') if cmd == '0': break if cmd in method_map: method_map[cmd]() else: print('指令错误,重来') sys_start()
Copy
需求: 1.用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000 2.实现 登录,注册,注销,购物,充值,退出系统 六个功能 3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0 1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断,都通过进入输入密码,否则重新输入 2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册 3)注册是将账号密码写入文件,财产余额初始为0, 第一次写入格式:账号|密码|余额 再次写入格式:,账号|密码|余额 4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户 5.完成用户登录 1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法, { 'abc': {'ps': '123', 'money': 0}, 'qwe': {'ps': '000', 'money': 1000} } 2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录 3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下 4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录 6.用户注销,就是清楚登录状态,将存放登录用户信息的user字典制空user={} 7.用购物功能完成购物, 1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物 2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物 3)如果余额不足则进入充值功能 8.充值功能 1)必须在登录状态才可以操作 2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中 9.退出系统,将退出系统,但注册的用户和余额都保存在文件中 ```python #!/usr/bin/env python user = {} # 登陆认证装饰器: 确认用户是否登陆 def check_login(func): def inner(*args, **kwargs): if not user: login() return func(*args, **kwargs) # 返回原函数的返回值 return inner # 返回原函数的函数名 '''1. 用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000 账号|密码|余额,账号|密码|余额''' # 读文件 def _read_file(): dic = {} with open('user.info2', 'r', encoding='utf-8') as f: a = f.read() if a: # 判断能够读出文件内容,写入字典;否则不操作,最后应该输出还是空字典 for i in a.split(','): res = i.split('|') dic[res[0]] = {'ps': res[1], 'money': int(res[2])} # dic={'abc': {'ps': '123', 'money': 0}, 'qwe': {'ps': '123', 'money': 1000}} return dic # 写文件 def _write_file(dic): info = '' for x, y in dic.items(): # x=abc,y={'ps': '123', 'money': 0} u = x v = y['ps'] w = y['money'] info += '%s|%s|%s,' % (u, v, w) info = info.rstrip(',') with open('user.info2', 'w', encoding='utf-8') as f: f.write(info) # 注册 ''' 3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0 1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断, 都通过进入输入密码,否则重新输入 2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册 3)注册是将账号密码写入文件,财产余额初始为0, 第一次写入格式:账号|密码|余额 再次写入格式:,账号|密码|余额 ''' # 账号和密码写入2个while循环,因为账号或者密码输错都返回各自的循环, # 如果写在一个while循环,那么密码输错,就会重新再输入账号了 def register(): dic = _read_file() while True: usr = input('输入账号 ').strip() if usr in dic: # 账号在字典里不通过 print('账号已存在') continue if not usr: # 账号为空不通过 print('账号不能为空') continue break while True: pwd = input('输入密码 ').strip() if len(pwd) < 3: # 需求2 输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册 print('密码长度必须满3位,重新输入密码') continue # 如果密码不合法,就返回继续输入密码 else: dic[usr] = {'ps': pwd, 'money': 0} _write_file(dic) print('注册成功') break # 登录 ''' 4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户 5.完成用户登录 1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法, { 'abc': {'ps': '123', 'money': 0}, 'qwe': {'ps': '000', 'money': 1000} } 2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录 3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下 4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录 ''' def login(): print('登陆功能') global user # 1. 登陆状态的判断 if user: print('用户%s已登陆' % user['usr']) return # 2. 获取用户信息 user_dic = _read_file() # 3. 用户验证,三次错误取注册 count = 1 while True: if count > 3: register() return usr = input('输入账号 ').strip() if not usr: print('账号不能为空') count += 1 continue if usr not in user_dic: print('账号不存在') count += 1 continue break # 4. 密码验证 tag = 1 while True: if tag > 3: print('已输错3次,请重新登陆') return pwd = input('输入密码 ').strip() if not pwd: print('密码不能为空') tag += 1 continue if len(pwd) < 3: print('密码不能少于3位') tag += 1 continue if pwd != user_dic[usr]['ps']: print('密码错误') tag += 1 continue break # 5. 完成登陆,更新登陆状态 money = user_dic[usr]['money'] user = {'usr': usr, 'ps': pwd, 'money': money} print('登陆成功') # 注销 def logout(): print('注销功能') global user if not user: print('未登陆,无需注销') return print('正在注销用户%s >>>>' % user['usr']) user = {} print('注销成功') # 购物 ''' 7.用购物功能完成购物, 1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物 2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物 3)如果余额不足则进入充值功能 ''' @check_login def shopping(): goods_map = { '男朋友': 100, '女朋友': 100, 'ipad': 1000 } print('购物功能') for k, v in goods_map.items(): print(k, v, end=' ') goods = input('请输入购物商品名 ') if goods not in goods_map: print('没有该商品') return while goods_map[goods] > money: choose = int(input('余额不足,是否进行充值 0|1')) if not choose: print('返回主页面') return print('将进入充值页面') top_up() user['money'] -= goods_map[goods] user_dic = _read_file() goods_map = { '男朋友': 100, '女朋友': 100, 'ipad': 1000 } usr = user['usr'] user_dic[usr]['money'] -= goods_map[goods] _write_file(user_dic) print('购物成功') if int(input('是否继续购物0|1:')): shopping() print('返回主页面') # 充值 ''' 8.充值功能 1)必须在登录状态才可以操作 2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中 ''' @check_login def top_up(): print('充值功能') money = int(input('充值的金额 ')) user['money'] += money user_dic = _read_file() usr = user['usr'] user_dic[usr]['money'] += money _write_file(user_dic) print('充值成功') # 2.实现 登录,注册,注销,购物,充值,退出系统 六个功能 # 程序入口 method_map = { '1': login, '2': register, '3': shopping, '4': top_up, '5': logout } def run(): while True: cmd = input('''功能: 1:<登陆> 2:<注册> 3:<购物> 4:<充值> 5:<注销> 6:<退出> >>>: ''') if cmd == '6': break if cmd in method_map: method_map[cmd]() else: print('指令错误') continue run()
Copy
(方法二) user = {} # 登陆装饰器 def check_login(func): def inner(*args, **kwargs): if not user: print('未登陆') login() res = func(*args, **kwargs) return res return inner # 读文件 def _read(): dic = {} with open('user.info2', 'r', encoding='utf-8') as f: a = f.read() if not a: return b = a.split(',') for i in b: u = i.split('|')[0] v = i.split('|')[1] w = i.split('|')[2] dic[u] = {'ps': v, 'money': int(w)} return dic # 写文件 def _write(dic): if not dic: return info = '' for u, v in dic.items(): x = v['ps'] y = v['money'] info += '%s|%s|%s,' % (u, x, y) info = info.rstrip(',') with open('user.info2', 'w', encoding='utf-8') as f: f.write(info) def register(): print('注册功能') dic = _read() while True: usr = input('输入账号 ') if not usr: print('账号不能为空') continue elif usr in dic: print('账号已存在') continue break while True: pwd = input('输入密码 ') if not usr: print('密码不能为空') continue elif len(pwd) < 3: print('密码不合法') continue break dic[usr] = {'ps': pwd, 'money': 0} _write(dic) print('账号%s注册成功' % usr) def login(): user_dic = _read() global user # 如果user字典非空,则用户已登陆 if user: print('用户%s已登陆' % user['usr']) # 账号输错3次 count = 1 while True: if count > 3: print('账号输入次数过多,请注册') register() return usr = input('输入登陆账号') if not usr: print('账号不能为空') count += 1 continue elif usr not in user_dic: print('账号不存在') count += 1 continue break # 密码输错3次 tag = 1 while True: if tag > 3: print('密码输入次数过多,请注册') register() return pwd = input('输入登陆密码') if not usr: print('密码不能为空') tag += 1 continue elif len(pwd) < 3: print('密码不合法') tag += 1 continue elif pwd != user_dic[usr]['ps']: print('密码错误') tag += 1 continue break user = {'usr': usr, 'ps': pwd, 'money': user_dic[usr]['money']} print('用户%s登陆成功' % usr) def logout(): global user if not user: print('没有用户登陆,无需注销') return res = user['usr'] user = {} print('%s注销成功' % res) @check_login def topup(): print('充值功能') global user money = int(input('充多少 ')) user['money'] += money # 更新登陆信息user字典里money的信息 user_dic = _read() # 读取所有用户并保存成一个字典 user_dic[user['usr']]['money'] += money # 更新总字典 _write(user_dic) # 最后将总的字典写入文件 print('充值成功') @check_login def shop(): print('购物功能') shop_list = { '男朋友': 100, '女朋友': 50, 'ipad': 1000 } for u, v in shop_list.items(): print(u, v, end=' ') print('') choice = input('请选择商品 ') if choice not in shop_list: print('没有该商品,返回主页面') return money = shop_list[choice] global user user_dic = _read() while money > user['money']: confirm = int(input('余额不足,是否进行充值0|1')) if not confirm: print('返回主界面') return print('进入充值页面') topup() user['money'] -= money user_dic[user['usr']]['money'] -= money _write(user_dic) print('购物成功') choice2 = int(input('是否继续购物0|1')) if choice2: print('继续购物') shop() else: print('返回主页面') # 程序入口 map_list = { '1': login, '2': register, '3': logout, '4': shop, '5': topup } def run(): while True: choice = input('''请选择功能: 1:登陆|2:注册|3:注销|4:购物|5:充值|6:退出系统 ''') if choice == '6': break if choice not in map_list: print('指令错误') continue map_list[choice]() run()
posted @   cjw1219  阅读(209)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示