自学内容网 自学内容网

python基础项目

1.联系人案例

# 导入的模块
from input_util import *
import re
import csv

# 定义一个变量保存文件读取的信息
users = {}

# 封装读取文件的函数
def reader_file(path_name: str = './python基础/2024-11-15python基础项目/data/a.csv') -> None:
    try:
        with open(path_name, encoding = 'utf-8') as file:
            csv_file = csv.reader(file)
            next(csv_file) # 跳过表头
            for data in csv_file:
                users[data[0]] = data[1: ]
    except Exception as e:
        print(e)

# 校验手机号、邮箱是否符合
def phone_email_regex(regex: str, data: str) -> bool:
    return True if re.match(regex, data) else False

# 编写添加功能 (python 中调用一个函数需要这个函数在其上面存在)
def add_user() -> None:
    name = input('请输入联系人姓名:')
    if name in users:
        print('联系人已存在')
    else:
        while 1:
            phone = input('请输入电话:')
            if phone_email_regex('^(\+86[ \-])?1[3-9][0-9]{9}$', phone):
                break

        while 1:
            email = input('请输入邮箱:')
            if phone_email_regex('^[a-zA-Z0-9_]{5,13}@[a-zA-Z0-9]{2,}\.com$', email):
                break

        address = input('请输入地址:')
        users[name] = [phone, email, address]
        print('添加成功')
    pass

def save_user(path_name: str = './python基础/2024-11-15python基础项目/data/a.csv') -> None:
    try:
        with open(path_name, encoding = 'utf-8', mode = 'w', newline = '') as file:
            csv_file = csv.writer(file)
            csv_file.writerow(['姓名', '手机号', '邮箱',' 地址'])
            for k, v in users.items():
                csv_file.writerow([k] + v)
    except Exception as e:
        print(e)

# 通过函数设计完成增删改查的功能(目前只完成增功能,后面补充)
def menu() -> None:
    reader_file()

    msg = ['1.添加联系人', '2.查看联系人', '3.修改联系人', '4.删除联系人', '0.退出', '请选择:']
    while 1:
        key = input_int('\n'.join(msg), 0, 4)
        match key:
            case 0:
                save_user()
                return # return 的权限比 break 大,break 只是结束当前循环,return 是直接结束当前函数
            case 1:
                add_user()
                pass
            case 2:
                pass
            case 3:
                pass
            case 4:
                pass

menu()
print(users)

2.奖客富翁

from input_util import *
import random
import csv

users = {}
login_user = None

def reader_user(path_name: str = './python基础/2024-11-15python基础项目/data/user.csv') -> None:
    try:
        with open(path_name, encoding = 'utf-8') as file:
            csv_file = csv.reader(file)
            next(csv_file)
            for data in csv_file:
                users[data[0]] = [data[1], int(data[-1])]
    except Exception as e:
        print(e)

def reg_user() -> None:
    name = input_str('请输入用户名:', 1)
    if name in users:
        print('用户已存在')
    else:
        pwd = input_str('请输入密码:', 1)
        while 1:
            card = random.randint(1000, 9999)
            if card not in [i[-1] for i in users.values()]:
                break
        users[name] = [pwd, card]
        print(f'{name}注册成功,请登录后参与抽奖')
    pass

def login() -> None:
    name, pwd = input_str('请输入用户名:', 1), input_str('请输入密码:', 1)
    global login_user # 声明要用全局变量
    if name in users and users[name][0] == pwd:
        print(f'{name}登录成功')
        login_user = [name, users[name][-1]]
        return
    print('用户名或密码错误')

def save_user(path_name: str = './python基础/2024-11-15python基础项目/data/user.csv') -> None:
    try:
        with open(path_name, encoding = 'utf-8', mode = 'w', newline = '') as file:
            csv_file = csv.writer(file)
            csv_file.writerow(['用户名', '密码', '卡号'])
            for k, v in users.items():
                csv_file.writerow([k] + [str(i) for i in v])
    except Exception as e:
        print(e)

# 抽奖
def lottery() -> None:
    if login_user:
        n = random.randint(0, 9)
        if n == login_user[-1] % 10:
            a = '恭喜你中奖了'
        else:
            a = '你没有中奖'
        print(f'{a}\n中奖号码是:{n},您的卡号是:{login_user[-1]}')
    else:
        print('请先登录,再来抽奖')

def menu() -> None:
    msg = ['1.注册', '2.登录', '3.抽奖', '0.退出', '请选择:']
    reader_user()
    while 1:
        key = input_int('\n'.join(msg), 0, 3)

        match key:
            case 0:
                save_user()
                return
            case 1:
                reg_user()
                pass
            case 2:
                login()
                pass
            case 3:
                lottery()
                pass

menu()

3.汽车租赁

from input_util import *
import csv

cars = {}

def reader_data(path_name: str = './python基础/2024-11-15python基础项目/data/car.csv') -> None:
    try:
        with open(path_name, encoding = 'utf-8') as file:
            csv_file = csv.reader(file)
            next(csv_file) # 跳过表头
            for data in csv_file:
                if data[0] in cars:
                    cars[data[0]].append(data[1: ])
                else:
                    cars[data[0]] = [data[1: ]]
    except Exception as e:
        print(e)


def mini_car() -> None:
    msg = ''
    index = 1
    for data in cars['轿车']:
        msg += f'{index}.' + ' '.join(data) + '\n'
        index += 1
    msg += '请选择:'

    key = input_int(msg, 1, index - 1)

    days = input_int('请输入租赁的天数:', 1)

    car = cars['轿车'][key - 1]

    money = days * int(car[-1])

    if days > 150:
        money *= 0.7
    elif days > 30:
        money *= 0.8
    elif days > 7:
        money *= 0.9

    print(f'您租赁的车辆信息是:{car[0]}{car[1]}车牌号是:{car[2]}, 每天租金:{car[-1]}, 您租赁的天数是:{days}, 您本次一共消费:{money}RMB')

def menu() -> None:
    reader_data()
    while 1:
        key = input_int('1.轿车\n2.客车\n0.退出\n请选择:', 0, 2)
        match key:
            case 0:
                return
            case 1:
                mini_car()
                pass
            case 2:
                pass

menu()

4.练习


原文地址:https://blog.csdn.net/WWXDwrn/article/details/144326283

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!