一.日期计算器

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.功能描述

  1. 创建商品价格表,包括商品名称、商品价格、商品内容自拟。
  2. 创建一个购物车,购物车用于保存所购商品名称和商品价格。
  3. 输入提示信息:购物金额上限、商品编号或者选择相应操作符(p打印,m移出,v查看,q退出)。
  4. 当购物车内商品货款合计大于购物金额时,提示不能购买商品。
  5. 当购物车内商品货款合计小于购物金额时,返回重新选择购物操作。
  6. 选择“p”打印出购物清单,包括商品名称、商品价格、购物合计金额和余额。
  7. 选择“m”移出购买商品,首先显示购物清单,输入购买车中商品编号,删除购物车中商品,重新显示修改后购物清单。
  8. 选择“v”查看购物清单。
  9. 选择“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)
  1. 使用列表存储商品信息和购物车信息,便于后边的插入,删除,查找操作
  2. isdigit:判断字符串是否由0-9组成,返回值为True或False,可以用来检测输入的是商品编号还是相应操作符
  3. enumerate:将可迭代对象打包成“索引-元素”对,可以用来获取商品编号和信息
  4. 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.8
pip 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()

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐