Python-十个代码案例
一.日期计算器
1.功能描述
输入任意俩个日期,计算俩个日期之间隔了多少天
2.代码实现
# 第一种
# import datetime
#
# date1 = datetime.datetime(2006, 4, 3)
# date2 = datetime.datetime(2025, 5, 3)
#
# print(date2 - date1)
# 第二种
# import datetime as dt
#
# date1 = dt.datetime(2006, 4, 3)
# date2 = dt.datetime(2025, 5, 3)
#
# print(date2 - date1)
# 第三种
from datetime import datetime
date1 = datetime(2006, 4, 3)
date2 = datetime(2025, 5, 3)
print(date2 - date1)
在上述代码中有三种写法,第一种是通过import语句导入模块,使用该模块下的datetime类,
其中,datetime类中至少需要三个核心参数,分别是年,月,日,还可以看用户需求增加时,分,秒等参数。
第二种,是将模块名赋予了一个别名,可以简化代码的书写。
第三种是直接从模块名中导入了datetime类,因此后续书写代码中,可以直接使用类名,无需使用模块名。
二.翻转单词顺序
1.功能描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"
2.代码实现
def reverseWords(s:str):
# 分割成数据类型为字符串的数组
token = s.split(' ')
# 将列表翻转
token.reverse()
return ' '.join(token)
print(reverseWords('I am a student.'))
split:字符串类型的内置方法,用于将字符串按指定分隔符分割成列表。如:
s = 'a,b,c', s.split(',')输出结果为['a','b','c'],该语句就是以','为分隔符将字符串s分割组装成列表
而在上述代码中是以空格为分隔符进行分割
reverse:列表的内置方法,直接修改原列表,将列表中的顺序反转。如:
原列表a=[1,2,3],a.reverse(),输出结果为a=[3,2,1]
(注意,reversed方法也是反转列表中的顺序,区别在于该方法不会修改原列表,而是直接生成一个新的反转迭代器)
join:将可迭代对象(列表,元组)中的元素,用调用该方法的字符串作为分隔符,拼接成一个新的字符串,语法格式为:分隔符字符串.join(可迭代对象)。如:
a=['1','2','3'],'|'.join(a),输出结果为:a='1|2|3'
三.旋转字符串
1.功能描述
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea' 。
2.代码实现
def rotalWords(s:str, goal:str):
if len(s) == len(goal):
return goal in (s + s)
return False
print(rotalWords('abcde','bcdea'))
- s和goal的字符串长度如果不同,那么s一定不能通过旋转得到goal,使用if和len进行字符串长度判断
- 若s=‘abcde',则s+s=’abcdeabcde',所谓的字符串旋转可以看作一个平移,每旋转一次相当于在s+s字符串中向右平移一位,而该字符串就包含了s所能旋转的所有情况,只需要查找goal是否在s+s字符串内
四.统计是给定字符串前缀的字符串数目
1.功能描述
给你一个字符串数组 words 和一个字符串 s ,其中 words[i] 和 s 只包含小写英文字母 。请你返回 words 中是字符串 s 前缀 的 字符串数目 。一个字符串的前缀是出现在字符串开头的子字符串。子字符串是一个字符串中的连续一段字符序列。
2.代码实现
def countPreFixs(words:list, s:str):
count = 0
for word in words:
if s.startswith(word):
count += 1
return count
print(countPreFixs(['a','b','c','ab','bc','cd','abc'],"abc"))
startswith:字符串的内置方法,返回值为布尔类型(True,False),判断字符串是否以指定前缀开始,格式如下:字符串.startswith(前缀)
因此在上述代码中,先用for循环遍历words中的字符串,再用startswith方法判断是否是s的前缀。
(endswith是判断字符串是否以指定后缀开始的,用法和startswith一样)
五.文件查找工具
1.功能描述
指定一个待搜索路径, 同时指定一个待搜索的关键字. 在待搜索路径中查找是否文件名中包含这个关键字
2.代码实现
import os
inputPath = input("请输入待搜索路径:")
pattern = input("请输入待搜索关键词:")
for dirpath, dirnames, filenames in os.walk(inputPath):
for file in filenames:
if pattern in file:
print(f"{dirpath}/{file}")
- os.walk:遍历递归指定目录及其所有子目录
- dirpath:当前正在遍历的目录路径
- dirnames:是一个列表,存储了当前目录路径下所有的子目录
- filenames:也是一个列表,包含了当前目录下所有的文件名
下面对os.walk的三个返回值做出了一个展现
import os
inputPath = input("请输入待搜索路径:")
pattern = input("请输入待搜索关键词:")
for dirpath, dirnames, filenames in os.walk(inputPath):
print("----------------------------------------")
print(f'dirpath: {dirpath}')
print("dirnames: ")
for name in dirnames:
print(name)
print("filenames: ")
for file in filenames:
print(file)
运行结果:
六.购物车管理程序
1.功能描述
- 创建商品价格表,包括商品名称、商品价格、商品内容自拟。
- 创建一个购物车,购物车用于保存所购商品名称和商品价格。
- 输入提示信息:购物金额上限、商品编号或者选择相应操作符(p打印,m移出,v查看,q退出)。
- 当购物车内商品货款合计大于购物金额时,提示不能购买商品。
- 当购物车内商品货款合计小于购物金额时,返回重新选择购物操作。
- 选择“p”打印出购物清单,包括商品名称、商品价格、购物合计金额和余额。
- 选择“m”移出购买商品,首先显示购物清单,输入购买车中商品编号,删除购物车中商品,重新显示修改后购物清单。
- 选择“v”查看购物清单。
- 选择“q”退出购物程序。
2.代码实现
import sys
# 商品信息列表,编号,名称,价格
goods_price = [
['1', '火腿肠', 2],
['2', '笔记本', 10],
['3', '沐浴露', 20],
['4', '垃圾袋', 5]
]
# 购物车列表,名称,价格
shopping_cart = []
# 显示商品价格表
def view_goods(sum, balance, *args):
print('\n商品编号及对应产品')
for num, names, price in goods_price:
print(f'{num}:{names},价格:{price}元')
print(f'当前购物车合计:{sum}元,余额{balance}元')
print('操作符:p 打印,m 移出,v 查看,q 退出')
# 显示购物车内购买商品信息
def view_shop(sum, balance, *args):
if not shopping_cart:
print('购物车为空')
else:
print('购物清单:')
for i, (name, price) in enumerate(shopping_cart,1):
print(f'商品{i}:{name},价格:{price}元')
print(f'当前购物车合计:{sum}元,余额{balance}元')
# 购物金额上限
amount_limit = input('请输入购物金额上限:')
if amount_limit.isdigit():
amount = int(amount_limit)
while True:
# 购物车总额
car_total = sum(price for _, price in shopping_cart)
# 余额
balance = amount - car_total
view_goods(car_total, balance)
choice = input('请输入商品编号或相应操作符:')
if choice.isdigit():
goods_id = choice
for ids, (num, name, price) in enumerate(goods_price):
# 商品编号是否存在
if num == goods_id:
total = car_total + price
# 购物车总额大于金额上限
if total > amount:
print('购物车内商品货款合计大于购物金额,不能购买该商品!')
else:
shopping_cart.append([name,price])
print(f'已将{name}添加到购物车中')
break
else:
print('商品编号不存在,请重新输入!')
else:
if choice == 'p':
view_shop(car_total, balance)
elif choice == 'm':
if not shopping_cart:
print('购物车为空,没有商品可移出')
continue
view_shop(car_total, balance)
remove_num = input('请输入要移除的商品编号:')
if remove_num.isdigit():
remove_num = int(remove_num)
if 1 <= remove_num <= len(shopping_cart):
removed = shopping_cart.pop(remove_num - 1)
print(f'已移除商品{removed[0]}')
car_total = sum(price for _, price in shopping_cart)
balance = amount - car_total
print('\n修改后的购物清单:')
for i, (name, price) in enumerate(shopping_cart,1):
print(f'商品{i}:{name},价格:{price}元')
print(f'当前购物车合计:{car_total}元,余额{balance}元')
else:
print('商品编号超出范围,请重新输入')
print('请输入正确的商品编号')
elif choice == 'v':
view_shop(car_total,balance)
elif choice == 'q':
print('感谢使用,再见!')
sys.exit(0)
- 使用列表存储商品信息和购物车信息,便于后边的插入,删除,查找操作
- isdigit:判断字符串是否由0-9组成,返回值为True或False,可以用来检测输入的是商品编号还是相应操作符
- enumerate:将可迭代对象打包成“索引-元素”对,可以用来获取商品编号和信息
- for _,price in shopping_cart:是在迭代过程中对列表的解包操作,’_‘是一个占位符,表示我们不需要name的值,然后在for前面使用price变量接收每个商品的价格再使用sum函数进行求和
七.生成二维码
1.功能描述
生成二维码需要使用到第三方库qrcode,我们可以在python官网或者pycharm上面使用pip install qrcode[pil]指令进行安装,安装成功后会有warning提示,不用管他,只是因为我们安装的不是最新版本。
2.代码实现
import qrcode
img = qrcode.make('世一甄姬')
img.save('qrcode1.png')
make:生成二维码图像,参数可以是字符串(网址),数字等。
save:图像对象保存为指定格式的文件,在上述代码中是直接保存到python文件同个目录下
八.操作excel
1.功能描述
读取excel可以用xlrd和xlwt俩模块,在这里我使用xlrd,使用前需要先安装xlrd库,可以在pycharm中使用pip insatll xlrd==1.2.0进行安装
2.代码实现
import xlrd
# 1.打开xlsx文件
xlsx = xlrd.open_workbook('c:/code/test.xlsx')
# 2.获取0号标签页(当前只有一个标签页),也可以按名称获取
# table = xlsx.sheet_by_index("sheet1")
table = xlsx.sheet_by_index(0)
# 3.获取总行数
nrow = table.nrows
# 4.遍历数据
total = 0
count = 0
# 因为第一排是标题,所以下标从1开始
for i in range(1, nrow):
classId = table.cell_value(i, 1)
if classId == 100:
total = total + table.cell_value(i, 2)
count += 1
print(total)
print(total/count)
九.程序猿鼓励师
1.功能描述
监听键盘按键, 每按键 20 下, 就自动播放一个音频, 鼓励一下自己.在写代码前要先安装第三方依赖,在pycharm上使用pip install pynput==1.6.8pip install playsound==1.2.2进行安装
2.代码实现
import random
import sys
from pynput import keyboard
from playsound import playsound
from threading import Thread
soundList = ['sound/1.mp3', 'sound/2.mp3', 'sound/3']
# 统计当前用户按了多少次键盘
count = 0
def onRelease(event):
print(event)
global count
count += 1
if count % 5 == 0:
i = random.randint(0, len(soundList) - 1)
# playsound(soundList[i])
sound_path = soundList[i]
sound_path_encoded = sound_path.encode(sys.getfilesystemencoding())
t = Thread(target=playsound, args=(soundList[i],))
t.start()
listener = keyboard.Listener(on_release=onRelease)
listener.start()
listener.join()
- onRelease:是一个回调函数,当用户在释放按键时就会调用到,该函数不是自己主动调用的,而是交给Keyboard库中的Listener,由listener在用户释放按键时自动调用,并传入event对象
- Thread:有俩个参数,分别是target和args,target输入制定线程要执行的函数,agrs指定传递给target函数的参数,是以元组形式传递
(当元组中只有一个元素时,末尾要加上逗号)
十.学生管理系统
1.功能描述
实现一个命令行版本的学生管理系统,有以下功能:
- 新增学生
- 显示学生
- 查找学生
- 删除学生
- 存档到文件
2.代码实现
import sys
import os.path
# 使用该全局变量,管理所有学生信息
# 列表中的每个元素都是一个字典,每个字典就是一个学生
students = []
def save():
with open('c:/code/test.txt', 'w', encoding='utf-8') as f:
for s in students:
f.write(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
print(f"[存档成功],共存储了{len(students)}条记录!")
def load():
if not os.path.exists('c:/code/test.txt'):
return
# 读档的时候要把旧的数据清理干净
global students
students = []
with open('c:/code/test.txt', 'r', encoding='utf-8') as f:
for line in f:
# 切分之前去除末尾的换行符
line = line.strip()
# 按照'\t'进行分割
tokens = line.split('\t')
if len(tokens) != 4:
print(f"当前格式存在问题,lien={line}")
continue
student = {
'id':tokens[0],
'name':tokens[1],
'gender':tokens[2],
'className':tokens[3]
}
students.append(student)
print(f"读档成功!共读取到{len(students)}条数据")
def menu():
print('1.新增学生')
print('2.显示学生')
print('3.查找学生')
print('4.删除学生')
print('0.退出程序')
choice = input("请输入你的选择:")
return choice
def insert():
print('[新增学生]开始!')
studentId = input('请输入学生的学号:')
studentName = input('请输入学生的姓名:')
gender = input('请输入学生的性别:')
if gender not in ('男', '女'):
print('输入的性别不符合要求,新增失败!')
return
className = input('请输入学生的班级:')
student = {
'id': studentId,
'name': studentName,
'gender': gender,
'className': className
}
global students
students.append(student)
save()
print('[新增学生]结束!')
def show():
print('[显示学生]开始!')
for s in students:
print(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['className']}")
print(f'[显示学生]结束!共显示了{len(students)}条信息!')
def find():
# 根据学生姓名查找
print("[查找学生]开始!")
found = False
count = 0
name = input('请输入要查找的学生姓名;')
for s in students:
if name == s['name']:
found = True
count += 1
print(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['className']}")
if not found:
print(f"没有查找到姓名为: {name} 的学生信息")
return
print(f"[查找学生]结束!共找到了 {count} 个匹配的同学")
def delete():
print('[删除学生]开始!')
found = False
id = input("请输入你要删除的学生学号:")
for s in students:
if s['id'] == id:
found = True
print(f"删除{s['name']}同学的信息!")
students.remove(s)
save()
if not found:
print(f"学号为{id}的学生信息不存在,删除失败!")
return
print('[删除学生]结束!')
def main():
print("---------------------------------")
print(" 欢迎来到学生管理系统 ")
print("---------------------------------")
load()
while True:
choice = menu()
if choice == '1':
insert()
elif choice == '2':
show()
elif choice == '3':
find()
elif choice == '4':
delete()
elif choice == '0':
print("感谢使用!")
sys.exit(0)
else:
print('您的输入有误,请重新输入!')
main()
更多推荐

所有评论(0)