两年半Python练习生~收藏一份练习,建议收藏

文章目录2 函数练习 2.4 模拟登录2.5 函数使用技巧2.6 用法 3 文件操作 4 网络 5 排序 6 while循环 7 API调用 8 爬虫 11 小游戏 12 数据库
1 数据类型 1.1 求奇、偶数
1、打印10以内的偶数
for i in range(1,10):if i % 2 == 0:print(i)
执行结果:
——————————————————————————————————————————————————————
2、打印10以内奇数
list = []for i in range(1,100):if i % 2 != 0:list.append(i)print(list)
执行结果:
——————————————————————————————————————————————————————
1.2 生成1-10乘方
list1 = []for value in range(1,10):list1.append(value**2)print(list1)
执行结果:
——————————————————————————————————————————————————————
1.3 求阶乘
一个正整数的阶乘()是所有小于及等于该数的正整数的积 , 并且0的阶乘为1 。比如3的阶乘:321
1 for循环求阶乘
num = int(input("请你输入一个数字:"))sum = 1for i in range(1,num+1):sum *= iprint(sum)
执行结果:
——————————————————————————————————————————————————————
2 递归求阶乘
def recursion_1(num):if num == 1:return numelse:return num * recursion_1(num - 1)num = 3print(recursion_1(num))
执行结果:
——————————————————————————————————————————————————————
1.4 生成随机数
生成随机数方法使用
import randomfor i in range(0,5):r = random.randint(1,16)print(r)
——————————————————————————————————————————————————————
1.5 字符串切片
#字符串“The first three items in the list are:”,按空格切分字符串,存入列表
#split方法将字符串按空格切分p= "The last three items in the list are"list1 = p.split()print(list1)
#切片,打印列表前三个元素
for i in list1[0:3]:print(i,'\n')
执行结果:
——————————————————————————————————————————————————————
1.6 输入Q退出
#只有输入q会退出程序while True:name = input('请输入一个字母:')#需要忽略大小写name = name.lower()if name == 'q':print('退出程序')breakelse:print(f'你输入的字母是{name},请重新输入 。')
——————————————————————————————————————————————————————
1.7 操作列表 (1)索引
索引从0开始
(2)拼接
将列表元素’name’,‘josh’,‘is’,'my’组合成一句话
name = ['name','josh','is','my']message = name[3] + ' '+name[0]+' '+name[2]+' '+name[1]#capitalize首字母大写print(message.capitalize())
(3)修改
修改列表元素值只需要 , 指定列表名和要修改的元素的索引,再指定该元素的新值
(4)添加 在列表末尾添加元素 , 使用
name = ['name1','name2','name3']name.append('jack')print(name)
2. 按索引添加列表元素
在索引[0]处,添加Tom
name = ['name1','name2','name3']name.insert(0,'Tom')print(name)
(5)删除
使用del,按索引删除,删除索引0的元素
name = ['Tom','jack','josh']del name[0]print(name)
使用pop()删除,删除完还能用
name = ['Tom','jack','josh']print(name)new_name = name.pop()print(name)print(new_name)
使用()按值删除,数据多,不清楚索引 , 可以按值删除
name = ['Tom','jack','josh']name.remove('jack')print(name)
(6)组织列表
sort()按字母顺序进行正序排序
name = ['dark','allen','coss','bibili']name.sort()print(name)
按倒序排序 , 向sort()方法传递参数=True
name = ['dark','allen','coss','bibili']name.sort(reverse=True)print(name)
反转列表
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
2 函数练习 2.1 函数定义
函数是实现具有特定功能的代码,中预制了很多内置函数 , 开发者也可以创建自定义函数 。
函数特点:
隐藏实现功能的细节;重用代码;提高代码的可读性,便于调试;
函数的定义:
def 函数名(形式参数1,形参2,形参n):要运行的代码(函数体)return 输出的数据(返回值)
——————————————————————————————————————————————————————
2.2 函数练习:打印诗句
定义一个函数 , 实现在控制台打印3遍唐诗《绝句》,并使用50个星(*)号分隔每一次打印结果
定义函数名为的函数函数体内:向控制台输出唐诗《绝句》函数体内:向控制台输出50个*号分隔符调用三次函数名为的函数
def ancient_poetry():print("鹅鹅鹅,曲项向天歌 。白毛浮绿水,红掌拨清波 。")for i in range(0,50):print("*",end='')print("\t")ancient_poetry()ancient_poetry()ancient_poetry()
执行结果:
——————————————————————————————————————————————————————
2、定义一个函数,里面包含多个形参,并使用50个星(*)号分隔每一次打印结果

两年半Python练习生~收藏一份练习,建议收藏

文章插图
def ancient_poetry(poetry_name,is_show_title,is_show_dynasty):if poetry_name == "绝句":if is_show_title == True:print("绝句 杜甫")if is_show_dynasty == True:print("唐朝")print("两个黄鹂鸣翠柳,\n一行白鹭上青天 。\n窗含西岭千秋雪,\n门泊东吴万里船 。")elif poetry_name=="清平调·其一":if is_show_title == True:print("\t")print("清平调·其一 李白")if is_show_dynasty == True:print("唐朝")print("云想衣裳花想容,\n春风拂槛露华浓 。\n若非群玉山头见,\n会向瑶台月下逢 。")print()for i in range(0,50):print("*",end='')ancient_poetry("绝句",True ,True)ancient_poetry("清平调·其一",True, True)
执行结果:
——————————————————————————————————————————————————————
2.3 币种汇率计算 简单换算
def calc_exchange_rate(amt,source,target):#人民币与美元汇率 :6.3486人民币 ≈1美元# 6.3486:1if source == "CNY" and target == "USD":result = amt /6.3486print("汇率计算成功")return resultr = calc_exchange_rate(100, "CNY", "USD")print(r)
执行结果:
关于函数:
#参数是函数的输入数据 , 而返回值则是函数的输出结果
#程序需要输出,可以用 + 对应的数据()进行返回 , 在外侧使用变量r进行接收即可 。
#不是必须的,但是语句执行后,函数将中断执行
#实际开发中,最好保证在函数的最后一行
#r = (100, “EUR”, “USD”) 如果实参"CNY"换成未定义的"EUR"(欧元),打印结果会为None,none在中代表不存在的含义
——————————————————————————————————————————————————————
实时汇率
1.支持不限制货币版本换算(接受任意的源货币和目标货币)
2.通过调用外部的汇率接口,获取实时最新汇率,并计算汇率 。
#pip install requests#pip install pytzimport requestsfrom datetime import datetime, timedelta, timezonedef get_exchange_rate(source, target):# 汇率 API 的 URL,示例使用的是 Open Exchange Rates API , 请根据实际情况更改api_url = f"https://open.er-api.com/v6/latest/{source}"try:# 发送 HTTP 请求获取汇率数据response = requests.get(api_url)data = http://www.kingceram.com/post/response.json()# 提取目标货币的汇率rates = data.get('rates', {})rate = rates.get(target)return rateexcept requests.exceptions.RequestException as e:print(f"无法获取汇率信息: {e}")return Nonedef calc_exchange_rate(amt, source, target):rate = get_exchange_rate(source, target)if rate is not None:result = amt * rate# 获取当前北京时间beijing_time = datetime.utcnow().replace(tzinfo=timezone.utc).astimezone(timezone(timedelta(hours=8)))print(f"汇率计算成功: {source} 到 {target}, 汇率为 {rate}")print(f"当前北京时间: {beijing_time.strftime('%Y-%m-%d %H:%M:%S')}")return resultelse:print(f"无法计算 {source} 到 {target} 的汇率")return None# 人民币到美元的实时汇率计算r1 = calc_exchange_rate(100, "CNY", "USD")print(r1)# 欧元到美元的实时汇率计算r2 = calc_exchange_rate(100, "EUR", "USD")print(r2)# 日元到美元的实时汇率计算r3 = calc_exchange_rate(100, "JPY", "USD")print(r3)
执行结果:
——————————————————————————————————————————————————————
2.4 模拟登录
简单版本
定义一个函数,向函数内传入形参, , 当值为josh且值为字符串时,返回“登录成功”;否则返回“请重新登录”
定义函数语句判断用户名和密码是否为字符串josh和
def login(username,password):if username == "josh" and password == "josh123":return "登录成功"else:return "请重新登录"login_1=login("josh","josh123")login_2=login("josh1","123456")print(login_1)print(login_2)
——————————————————————————————————————————————————————
完善版本
class User:def __init__(self, username, password):# 初始化用户对象self.username = usernameself.password = passwordself.login_attempts = 0self.is_locked = Falsedef login(self, entered_password):# 模拟用户登录if self.is_locked:return "账户已被锁定,请联系管理员解锁"if self.password == entered_password:# 登录成功,重置登录尝试次数self.login_attempts = 0return "登录成功"else:# 登录失败 , 记录尝试次数self.login_attempts += 1if self.login_attempts >= 3:# 登录失败次数过多,锁定账户self.is_locked = Truereturn "登录失败次数过多,账户已被锁定"else:# 还剩余尝试次数remaining_attempts = 3 - self.login_attemptsreturn f"登录失败,还剩余 {remaining_attempts} 次尝试"def interactive_login():# 创建用户对象(这里假设用户名和密码是固定的 , 你可以根据实际情况修改)user = User("josh", "josh123")# 循环,直到登录成功或达到最大尝试次数while True:# 通过交互式输入获取用户名和密码username = input("请输入用户名: ")password = input("请输入密码: ")# 进行登录尝试,并输出结果result = user.login(password)print(result)# 如果登录成功或达到最大尝试次数,跳出循环if result == "登录成功" or user.is_locked:break# 通过交互式输入进行登录尝试interactive_login()
执行结果:
——————————————————————————————————————————————————————
隐藏密码版本
下面是与显示密码版本相比,修改后用隐藏密码的部分:
#导入 getpass 模块import getpass#使用 getpass.getpass 获取密码:password = getpass.getpass("请输入密码: ")
这两处是对比之前显示密码版本的修改 , . 函数用于在终端中获取密码 , 而不显示输入的字符 。
执行结果:
这样,用户在输入密码时不会被其他人看到 。
——————————————————————————————————————————————————————
2.5 函数使用技巧
函数使用技巧1-1:
设置参数默认值:只需要在形参后增加 “=具体值”即可;
def calc_exchange_rate(amt, source, target='USD'):#target='USD' 将USD设置为默认参数值# 人民币与美元汇率 :6.3486人民币 ≈1美元# 6.3486:1if source == "CNY" and target == "USD":result = amt / 6.3486print("美元汇率计算成功")return result#7.241人民币 ≈1欧元#7.241 :1elif source == "CNY" and target == "EUR":result = amt /7.241print("欧元汇率计算成功")return resultr = calc_exchange_rate(100, "CNY")# r = calc_exchange_rate(100, "EUR", "USD") 如果实参"CNY"换成未定义的"EUR"(欧元),打印结果会为None,none在pythoon中代表不存在的含义print(r)r1 = calc_exchange_rate(100,"CNY","EUR")print(r1)
执行结果:
——————————————————————————————————————————————————————
函数使用技巧1-2:
(关键字传参),以形参形式传参也叫关键字传参,
#2、以形参形式传参(也叫关键字传参):# 定义一个体检的函数,里面包含姓名,年龄 , 身高等;'''def health_check(name,age,height,weight.5,hr,hhp,lbp,glu):health_check("josh",25,175,80.5,70,120,80,4.3)此种定义方式,如果单行看,根本无法得知传递的health_check("josh",25,175...)为何物 , 所以需要使用以形参形式传参传参而在一个函数内包含如此多的形参时,最好的方式是使用字典'''def health_check(name,age,height,weight,hr,hhp,lbp,glu):print("您的健康状况良好")health_check("josh",25,175,80.5,70,120,80,4.3)health_check(name="josh",age="18",height=170,weight=80.5,hr=70,hhp=120,lbp=80,glu=4.3)
执行结果:
——————————————————————————————————————————————————————
函数使用技巧1-3:
以混合形式传参
#3、混合形式传参def health_check1(name,age,*,height,weight,hr,hhp,lbp,glu):#*代表之后的所有参数传参时必须使用关键字传参print("您的健康状况良好")'''health_check1(name="josh", age="25", 170, weight=80.5, hr=70, hhp=120, lbp=80, glu=4.3)注释:这段代码表示,如传参时,age后的height 170不使用关键字传参就会报错 , 程序无法执行'''health_check1(name="josh",age="18",height=170,weight=80.5,hr=70,hhp=120,lbp=80,glu=4.3)#按关键字传参则执行成功
——————————————————————————————————————————————————————
序列传参
def calc(a,b,c):return a+b+cprint(calc(1,2,3))
——————————————————————————————————————————————————————
2.6 用法
定义info函数 , 使用格式化字符串向控制台输出"-程序员的梦工厂出生于2021年1月"
1、使用格式化字符串向控制台输出"-程序员的梦工厂出生于2021年1月"
2、调用函数,向函数内传入(程序员的梦工厂,2013年8月)
3、在函数传参时 , *号之后的所有参数必须使用关键字传参
‘’’
def info(*,name="python",content,time):print("{p1}-{p2}出生于{p3}".format(p1=name,p2=content,p3=time))info(content="-程序员的梦工厂出生于",time="2021年1月")
执行结果:
——————————————————————————————————————————————————————
3 文件操作 3.1 创建.txt文件 设计一个函数,在桌面上创建9个.txt文件 , 并以数字1-9.txt命名
def file_creation():path = 'C:/Users/Josh/Desktop/'for file_name in range(1,10):with open(path + str(file_name) + '.txt', 'w' ) as file:#file.write(str(file_name))file.write('hello world')print(f'File created:{path}{file_name}.txt')file_creation()
注意点: 需要将文件生成的路径修改实际路径
执行结果:
——————————————————————————————————————————————————————
3.2 删除文件
删除桌面上的所有txt文件
import osimport glob#定义搜索条件pattern = '*.txt'#获取桌面路径desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")#使用glob模块查找所有的匹配文件txt_files = glob.glob(os.path.join(desktop_path,pattern))#遍历找到的所有文件,删除它们for file in txt_files:try:os.remove(file)print(f"文件 {file} 已被删除")except OSError as e:print(f"删除文件 {file} 时出错:{e}")
执行结果:
——————————————————————————————————————————————————————
3.3 读取文件
读取桌面的.txt文件,并写入列表,打印值 。
def file_txt():filenames_path = r'C:/Users/Josh/Desktop/test.txt'with open(filenames_path,encoding='utf-8') as f:#readlines()方法返回值每行都是列表元素rest = f.readlines()#打印行数print(len(rest))print(rest)if __name__ == '__main__':file_txt()
执行结果:
——————————————————————————————————————————————————————
4 网络 4.1 中国(CN)IP网段获取
Apnic是全球5个地区级的注册机构(RIR)之一,负责亚太地区的以下一些事务:
(1)分配IPv4和IPv6地址空间 , AS号
(2)为亚太地区维护Whois数据库
(3)反向DNS指派
(4)在全球范围内作为亚太地区的社区的代表
文件包含亚太地区所有IP网段(每天更新):
在脚本中,我们使用了 |CN|ipv4 这个条件来过滤出中国(CN)的IPv4地址段 。
#pip install requestsimport osimport requestsfrom math import log2from datetime import datetime# 下载数据文件url = "http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest"response = requests.get(url)data = http://www.kingceram.com/post/response.text# 指定保存文件的路径download_folder ="C:/Users/Josh/Downloads"filename = os.path.join(download_folder, f"delegated-apnic-latest.txt")# 保存下载的数据到文件with open(filename, 'w') as file:file.write(data)# 处理数据并生成地址列表lines = data.split('\n')address_list = []for line in lines:if "|CN|ipv4" in line:parts = line.split('|')ip_start = parts[3]prefix_length = 32 - int(log2(int(parts[4])))address = f"add address={ip_start}/{prefix_length} disabled=no list=zh-ip"address_list.append(address)# 保存结果到文件output_filename = os.path.join(download_folder, f"address-list_{datetime.now().strftime('%Y%m%d')}.rsc")with open(output_filename, 'w') as file:file.write("/ip firewall address-list\n")file.write('\n'.join(address_list))print(f"生成地址列表文件:{output_filename}")
文件内容格式:
此格式我所知,可用于 软路由,导入 IPV4地址段使用 。
提取网段内容
将1.0.1.0/24类似内容提取出来
import redef extract_ip_addresses(input_file_path, output_file_path):# 打开输入文件以进行读取with open(input_file_path, 'r', encoding='utf-8') as input_file:# 读取输入文件的所有行并将它们存储在 'lines' 列表中lines = input_file.readlines()# 使用正则表达式提取以 'add address=' 开头的行中的IP地址ip_addresses = [re.search(r'add address=(\S+)', line).group(1) for line in lines if line.startswith('add address=')]# 打开输出文件以进行写入with open(output_file_path, 'w', encoding='utf-8') as output_file:# 将每个提取出的IP地址写入输出文件的新行for ip_address in ip_addresses:output_file.write(ip_address + '\n')if __name__ == '__main__':# 设置输入和输出文件的路径,用于转换input_path = r'C:/Users/Josh/Downloads/address-list_20231124.rsc'output_path = r'C:/Users/Josh/Downloads/extracted_addresses.txt'# 调用函数以提取和保存IP地址extract_ip_addresses(input_path, output_path)
执行结果:
——————————————————————————————————————————————————————
4.2之ssh远程linux ssh远程登录linux执行命令查看主机名
import paramikodef sshExeCMD():# 创建ssh客户端工具ssh_client = paramiko.SSHClient()# 设置丢失主机key时的策略为自动添加know hostsssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程主机ssh_client.connect(hostname="192.168.31.223",port=22,username="root",password="123456")stdin, stdout, stderr = ssh_client.exec_command("ifconfig")for line in stdout:print('Line: ', line.strip('\n'))# 打印出每一行ssh_client.close()if __name__ == '__main__':sshExeCMD()
执行结果:
——————————————————————————————————————————————————————
4.3 远程执行命令: eth0
import paramikodef sshExeCMD():# 创建ssh客户端工具ssh_client = paramiko.SSHClient()# 设置丢失主机key时的策略为自动添加know hostsssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程主机ssh_client.connect(hostname="192.168.31.223",port=22,username="root",password="123456")stdin, stdout, stderr = ssh_client.exec_command("ifconfig eth0")for line in stdout:print('Line: ', line.strip('\n'))# 打印出每一行ssh_client.close()if __name__ == '__main__':sshExeCMD()
——————————————————————————————————————————————————————
4.4 多服务器执行:df -hT
import paramikoimport sysdef sshExeCMD(ip,username,password,port):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname=ip,port=port,username=username,password=password)except Exception as e:print("连接服务器%s失败,请检查ip地址和端口是否正确!" % ip)print(e)sys.exit(1)stdin,stdout,stderr = ssh_client.exec_command("df -hT")print("服务器%s磁盘信息:" % ip)print(stdout.read().decode('utf-8'))ssh_client.close()# 注意这里,我们已经修复了关闭客户端的方法if __name__ == '__main__':servers = {"192.168.31.223":{"username":"root","password":"123456","port":22},"192.168.31.162":{"username":"root","password":"123456","port":22}}for ip,info in servers.items():sshExeCMD(ip = ip,username = info.get("username"),password = info.get("password"),port = info.get("port"))
执行结果:
——————————————————————————————————————————————————————
4.5命令通过参数传递 , 灵活
import paramikoimport sysdef sshExeCMD(ip,username,password,port,command):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname=ip,port=port,username=username,password=password)except Exception as e:print("连接服务器%s失败,请检查ip地址和端口是否正确!" % ip)print(e)sys.exit(1)stdin,stdout,stderr = ssh_client.exec_command(command)print("服务器%s执行结果:" % ip)print(stdout.read().decode('utf-8'))ssh_client.close()if __name__ == '__main__':servers = {"192.168.31.223":{"username":"root","password":"123456","port":22},"192.168.31.162":{"username":"root","password":"123456","port":22}}command_to_execcute = "netstat -tnlp"#ssh执行的命令for ip,info in servers.items():sshExeCMD(ip = ip,username = info.get("username"),password = info.get("password"),port = info.get("port"),command=command_to_execcute)
执行结果:
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
4.6 mysql数据库存放
首先,确保mysql服务器正常连接 , 并且需要已经安装好有一个mysql数据库 , 
创建数据库信息:
首先 , 你需要创建一个新的数据库 , 用于存储服务器的登录信息 。你可以选择一个适当的数据库名称 , 比如 。
#创建数据库ip_infoCREATE DATABASE ip_info;#进入ip_infouse ip_info;#创建表:在数据库中创建一个名为servers的表 。这个表应该包含以下字段:1、id:自增的唯一标识符,作为主键 。2、ip:服务器的IP地址 。3、name:服务器的用户名 。4、password:服务器的密码 。5、port:服务器的SSH端口号 。CREATE TABLE servers(id int AUTO_INCREMENT PRIMARY KEY,ip VARCHAR(255) NOT NULL,name VARCHAR(255) NOT NULL,password VARCHAR(255) NOT NULL,port INT NOT NULL);#插入服务器信息INSERT INTO servers(ip,name,password,port) VALUES('192.168.31.223','root','123456',22);select * from servers;INSERT INTO servers(ip,name,password,port) VALUES('192.168.31.162','root','123456',22);
代码:
import paramikoimport sysimport mysql.connectordef get_server_info_from_db():# 连接MySQL数据库db = mysql.connector.connect(host="192.168.31.223",# 数据库主机地址user="root",# 数据库用户名password="123456",# 数据库密码database="ip_info"# 数据库名称)cursor = db.cursor()# 执行查询语句,获取服务器登录信息query = "SELECT ip, name, password, port FROM servers"# 假设你的表名为serverscursor.execute(query)results = cursor.fetchall()servers = {}for result in results:ip, name, password, port = resultservers[ip] = {"username": name,"password": password,"port": port}cursor.close()db.close()print("成功从数据库调取server_info")# 添加这行打印语句来确认成功调取信息return serversdef sshExeCMD(ip, username, password, port, command):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname=ip,port=port,username=username,password=password)except Exception as e:print("连接服务器%s失败,请检查ip地址和端口是否正确!" % ip)print(e)sys.exit(1)stdin, stdout, stderr = ssh_client.exec_command(command)print("服务器%s执行结果:" % ip)print(stdout.read().decode('utf-8'))ssh_client.close()if __name__ == '__main__':servers = get_server_info_from_db()# 从数据库中获取服务器登录信息command_to_execcute = "netstat -tnlp"# ssh执行的命令for ip, info in servers.items():sshExeCMD(ip=ip,username=info.get("username"),password=info.get("password"),port=info.get("port"),command=command_to_execcute)
执行结果:
5 排序 5.1 冒泡排序
def bubble_sort(arr):n = len(arr)# 遍历所有数组元素for i in range(n):# 最后 i 个元素已经排好序,不需要再比较for j in range(n-i-1):# 如果当前元素比下一个元素大,则交换它们的位置if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arrarr = [64, 34, 25, 12, 22, 11, 90]bubble_sort(arr)
执行结果
——————————————————————————————————————————————————————
6 while循环 6.1 用法
#演示continue用法number = 10while number >=1:number -=1if number == 5:#等于5时,跳过当前循环continueprint(f"number is {number}")
——————————————————————————————————————————————————————
6.2 break用法
num = 10while num >=1:num -= 1if num == 5:breakprint(f'num is {num}')
——————————————————————————————————————————————————————
7 API调用 7.1 open api key调用
获取 key
打开地址:
创建新的key
点一下右侧的复制即可
将 添加到系统的环境变量,并重启主机生效 。
调用脚本
import openaiimport osopenai.api_key = os.getenv("OPEN_API_KEY")completion = openai.ChatCompletion.create(model = "gpt-3.5-turbo-16k",messages=[{"role":"user","content": "hi,who are you?"}])print(completion.choices[0].message)
执行结果:
7.2 文心一言api key调用
import requestsimport jsonAPI_KEY = "你的apikey"SECRET_KEY = "你的secrkt-key"def main():url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()payload = json.dumps({"messages": [{"role": "user","content": "你好"}]})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=http://www.kingceram.com/post/payload)print(json.dumps(json.loads(response.text), indent=4, ensure_ascii=False))def get_access_token():url ="https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}return str(requests.post(url, params=params).json().get("access_token"))if __name__ == '__main__':main()
8 爬虫 8.1 爬取小说(斗罗大陆)
import requestsfrom lxml import etreefrom urllib.parse import urljoin# 导入urljoin# 初始URLurl = 'https://www.51shucheng.net/wangluo/douluodalu/21750.html'while True:#用户代理头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'}# 发送GET请求resp = requests.get(url, headers=headers)# 设置编码resp.encoding = 'utf-8'# 解析HTML响应e = etree.HTML(resp.text)info = ' '.join(e.xpath('//div/p//text()'))title = e.xpath('//h1/text()')[0]# 打印和保存章节内容print(title)with open('斗罗大陆.txt', 'a', encoding='utf-8') as f:f.write(title + '\n\n' + info + '\n\n')# 使用urljoin查找下一章的URLnext_chapter_url = e.xpath('//*[@id="BookNext"]/@href')if not next_chapter_url:print("没有更多章节可用 。")break# 使用urljoin更新下一个URL,以确保正确构建URLurl = urljoin(url, next_chapter_url[0])print("已经抓取并保存了所有章节到斗罗大陆.txt文件中 。")
代码执行结果:
获取的章节显示:
斗罗大陆txt文件内容如下:
小说拉取完成 , 最底部显示如下:
11 小游戏 11.1 摇骰子简单游戏
import randomdef roll_dice(numbers=3,points=None):print('<<>>')if points is None:points=[]while numbers>0:point =random.randrange(1,7)points.append(point)numbers = numbers-1return pointsdef roll_result(total):isBig=11<=total<=18isSmall=3<=total<=10if isBig:return 'Big'if isSmall:return 'Small'def start_game():print('<<>>')choices = ['Big','Small']your_choices =input('Big or Small: ')if your_choices in choices:points = roll_dice()total = sum(points)youWin = your_choices == roll_result(total)if youWin:print('The points are ',points,'You Win !')else:print('The points are ',points,'You lose !')else:print('Invalid Words')start_game()start_game()
【两年半Python练习生~收藏一份练习,建议收藏】12 数据库 12.1 验证mysql状态
仅验证mysql数据库当前状态是否在线,查看版本或执行其他命令
import pymysqldb = pymysql.connect(host='192.168.31.223',port=3306,user='root',password='数据库密码',db='mysql',charset='utf8')cursor=db.cursor()#获取数据库版本cursor.execute("select version()")data = http://www.kingceram.com/post/cursor.fetchone()print("数据库连接正常,数据库版本是:%s" %data[0])db.close()
执行结果:
对比mysql执行:
——————————————————————————————————————————————————————
12.2 mysql查询
import pymysqldb = pymysql.connect(host='192.168.31.223',port=3306,user='root',password='数据库密码',db='mysql',charset='utf8')cursor=db.cursor()cursor.execute("select version()")cursor.execute("use atguigudb")cursor.execute("show databases")#查询并打印所有数据result = cursor.fetchall()for row in result:print(row)#获取数据库版本cursor.execute("select version()")data = http://www.kingceram.com/post/cursor.fetchone()print("数据库连接正常,数据库版本是:%s" %data[0])db.close()
执行结果:
——————————————————————————————————————————————————————
12.3 mysql增删改
#pip install pymysql提前导入pymysqlimport pymysql#登录数据库的信息db = pymysql.connect(host='192.168.31.223',port=3306,user='连接数据库的账号',password='连接数据库的密码',db='mysql',charset='utf8')#执行基本的数据库命令cursor=db.cursor()cursor.execute("select version()")cursor.execute("show databases")cursor.execute("use atguigudb")cursor.execute("show tables")#查询数据select_query = "select * from jobs"cursor.execute(select_query)#除了查询,其他修改操作需要db.commit()提交事务#插入数据insert_query ="INSERT INTO jobs(job_id,job_title,min_salary,max_salary) VALUES ('JOSH_ID_21','Operition',10000,15000)"cursor.execute(insert_query)db.commit()#修改数据update_query = "UPDATE jobs set min_salary=11000,max_salary=12000 WHERE job_id='JOSH_ID_11'"cursor.execute(update_query)db.commit()#删除数据delete_query = "DELETE FROM jobs WHERE job_id='JOSH_ID_10'"cursor.execute(delete_query)db.commit()result = cursor.fetchall()for row in result:print(row)#获取mysql版本cursor.execute("select version()")data = http://www.kingceram.com/post/cursor.fetchone()print("数据库连接正常,数据库版本是:%s" %data[0])db.close()
数据库-表结构如图:
——————————————————————————————————————————————————————