Python基础小项目

今天给大家写一期特别基础的Python小项目,欢迎大家支持,并给出自己的完善修改

(因为我写的都是很基础的,运行速率不是很好的

目录

1. 地铁票价

题目

地铁票价

地铁交通价格调整为:6公里(含)内3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分,每增加1元可乘坐20公里。

使用市政交通一卡通刷卡乘坐轨道交通,每自然月内每张卡支出累计满100元以后的乘次,价格给予8折优惠;满150元以后的乘次,价格给予5折优惠;

支出累计达到400元以后的乘次,不再享受打折优惠。

要求:

假设每个月,小明都需要上20天班,每次上班需要来回1次,即每天需要乘坐2次同样路线的地铁;

每月月初小明第一次刷公交卡时,扣款5元;

编写程序,从键盘获取距离,帮小明计算,如果不使用市政交通一卡通的每月总费用,和使用市政交通一卡通的每月总费用。

这个我写的时候用了巨多的if嵌套,效率巨低

程序源码

python 复制代码
# 使用巨多if嵌套,效率很低
while True:
    day = 1
    j = 1
    money = 0
    print("== 请输入距离 或 按'q'退出 ==")
    distance = input(">>> ")   # 设置距离
    if distance.isdecimal():
        distance = int(distance)
        if distance > 0:
            print("\n== 是不是一卡通? 'y'是 'n'不是==")
            yikatong = input(">>>[y/n] ")
            if yikatong.lower() == "y":     #把输入的字母变成小写
                while day <= 20:
                    j = 1
                    while j <= 2:
                        if money < 100:
                            if distance <= 6:
                                money += 3
                            if distance > 6 and distance <= 12:
                                money += 4
                            if distance > 12 and distance <= 22:
                                money += 5
                            if distance > 22 and distance <= 32:
                                money += 6
                            if distance > 32:
                                money += ((distance - 33) // 20) + 6 + 1
                        elif money >= 100 and money < 150:
                            if distance <= 6:
                                money += 3 * 0.8
                            if distance > 6 and distance <= 12:
                                money += 4 * 0.8
                            if distance > 12 and distance <= 22:
                                money += 5 * 0.8
                            if distance > 22 and distance <= 32:
                                money += 6 * 0.8
                            if distance > 32:
                                money += (((distance - 33) // 20) + 6 + 1) * 0.8
                        elif money >= 150 and money < 400:
                            if distance <= 6:
                                money += 3 * 0.5
                            if distance > 6 and distance <= 12:
                                money += 4 * 0.5
                            if distance > 12 and distance <= 22:
                                money += 5 * 0.5
                            if distance > 22 and distance <= 32:
                                money += 6 * 0.5
                            if distance > 32:
                                money += (((distance - 33) // 20) + 6 + 1) * 0.5
                        elif money > 400:
                            if distance <= 6:
                                money += 3
                            if distance > 6 and distance <= 12:
                                money += 4
                            if distance > 12 and distance <= 22:
                                money += 5
                            if distance > 22 and distance <= 32:
                                money += 6
                            if distance > 32:
                                money += (((distance - 33) // 20) + 6 + 1)
                        j += 1
                    day += 1
                money += 5
                print("\n你的总花费为:%.4f元\n" % money)
            elif yikatong.lower() == "n":   #把输入的字母变成小写
                while day <= 20:
                    j = 1
                    while j <= 2:
                        if distance <= 6:
                            money += 3
                        if distance > 6 and distance <= 12:
                            money += 4
                        if distance > 12 and distance <= 22:
                            money += 5
                        if distance > 22 and distance <= 32:
                            money += 6
                        if distance > 32:
                            money += ((distance - 33) // 20) + 6 + 1
                        j += 1
                    day += 1
                money += 5
                print("你的总花费为:%.4f元" % money)
            else:
                print("\nXX 输入有误请重新输入 XX")
        else:
            print("必须大于0,请从新输入")
    elif distance.lower() == "q":
        break
    else:
        print("必须是数字,而且大于0,请从新输入")

运行截图

2. 购物车

题目

购物车

如下商品列表

goods = [

{"name": "电脑", "price": 1000},

{"name": "Iphone", "price": 1200},

{"name": "豪车", "price": 3280},

{"name": "别墅", "price": 6500},

{"name": "游艇", "price": 5800},

{"name": "美女", "price": 2500},

]

完成以下要求:

要求用户输入总资产,列入:15000

判断驶入的金额能否购买价格最低的商品,如果不能让用户重新输入

显示商品列表,让用户根据序号选择商品,加入购物车

查看购物车,购物车内如果有相同的产品不要重复显示,以产品后面加数字形式表示此产品在购物车有两个或两个以上

结算时,判断购物车是否为空,如果为空则提示填充购物车

可以让用户删除购物车内的产品,或清空购物车

结算时如果余额不足,则提示账户余额不足

程序源码

python 复制代码
goods = [
    {"name": "电脑", "price": 1000},
    {"name": "Iphone", "price": 1200},
    {"name": "豪车", "price": 3280},
    {"name": "别墅", "price": 6500},
    {"name": "游艇", "price": 5800},
    {"name": "美女", "price": 2500},
]
while True:
    q = 0
    money = []
    shopping_cart = []
    for i, v in enumerate(goods, 1):
        money.append(v["price"])
    print("请输入您的总金额")
    salary = input(">>> ")
    if salary.isdecimal():  # 判断只让输入十进制数字
        salary = int(salary)
        money.sort()
        if salary <= 0:
            print("\n你玩我呢,没钱还来买\n")
            print("直接退出")
            break
        elif salary > 0 and salary < money[0]:  # 判断输入的金额能否购买价格最低的商品
            print("你的金额买不起任何一个东西\n")
        elif salary > money[0]:
            while True:
                all_price = 0
                print("\33[36;1m商品列表\33[1m".center(40, "="))
                for i, v in enumerate(goods, 1):
                    print("%d %s \33[34;1m%d\33[1m" % (i, v["name"].ljust(4, " "), v["price"]))
                print("请输入产品\33[31;1m序号\33[1m添加到购物车、返回上一层请按 \33[31;1mP \33[1m、完全退出请按 \33[31;1mQ\33[1m")
                seq_num = input(">>> ")
                if seq_num.lower() == "p":
                    break
                if seq_num.lower() == "q":
                    q = 1
                    break
                if seq_num.isdecimal():
                    seq_num = int(seq_num)
                    if seq_num > 0 and seq_num <= len(goods):
                        shopping_cart.append(goods[seq_num - 1])
                        for y in shopping_cart:
                            all_price += y["price"]
                        print("\33[33;1m%s\33[1m 已添加到购物车\n" % (goods[seq_num - 1]["name"]))
                        while True:
                            print("继续添加产品请按 \33[31;1mC\33[1m 、结算请按 \33[31;1mB\33[1m 、查看购物车请按 \33[31;1mS\33[1m 、完全退出请按 \33[31;1mQ\33[1m")
                            final_cho = input(">>> ")
                            if final_cho.lower() == "c":
                                break
                            elif final_cho.lower() == "b":
                                while True:
                                    print("您的余额为:\33[34;1m%d\33[1m 您购买的商品总价为:\33[34;1m%d\33[1m 确定购买吗? 确定 \33[31;1mY\33[1m 取消 \33[31;1mN\33[1m" % (salary, all_price))
                                    confirm_bill = input(">>> ")
                                    if confirm_bill.lower() == "y":
                                        if shopping_cart != []:
                                            if salary >= all_price:
                                                salary = salary - all_price
                                                print("购买成功\n")
                                                all_price = 0
                                                shopping_cart = []
                                                break
                                            elif salary < all_price:
                                                print("-_-!余额不足\n")
                                                break
                                        elif shopping_cart == []:
                                            print("购物车空空如也,填充后再来吧\n")
                                            break
                                    elif confirm_bill.lower() == "n":
                                        break
                                    else:
                                        print("输入有误,请重新输入\n")
                            elif final_cho.lower() == "s":
                                while True:
                                    print("\33[35;1m购物车\33[1m".center(40, "="))
                                    temp_cart = []
                                    for y in shopping_cart:
                                        if y not in temp_cart:
                                            temp_cart.append(y)
                                    for m, z in enumerate(temp_cart, 1):
                                        print("%d %s \33[34;1m%d\33[1m %d个" % (m, z["name"].ljust(4, " "), z["price"], shopping_cart.count(z)))
                                    print("\n购物车商品总金额为:\33[34;1m%d\33[1m" % all_price)
                                    print("您的余额为:\33[34;1m%d\33[1m" % salary)
                                    print("按\33[31;1m序号\33[1m可删除商品 、继续请按 \33[31;1mC\33[1m 、清空购物车请按 \33[31;1mE\33[1m")
                                    ctrl_shop_cart = input(">>> ")
                                    if ctrl_shop_cart.lower() == "c":
                                        break
                                    elif ctrl_shop_cart.lower() == "e":
                                        all_price = 0
                                        shopping_cart = []
                                        print("以清空购物车")
                                        break
                                    elif ctrl_shop_cart.isdecimal():
                                        ctrl_shop_cart = int(ctrl_shop_cart)
                                        if ctrl_shop_cart > 0 and ctrl_shop_cart <= len(temp_cart):
                                            all_price = all_price - temp_cart[ctrl_shop_cart - 1]["price"]
                                            shopping_cart.reverse()
                                            shopping_cart.remove(temp_cart[ctrl_shop_cart - 1])
                                            shopping_cart.reverse()
                                            print("删除成功\n")
                                        else:
                                            print("输入超出范围,请重新输入")
                                    else:
                                        print("输入有误,请重新输入\n")
                            elif final_cho.lower() == "q":
                                q = 1
                                break
                            else:
                                print("输入有误,请重新输入\n")
                    else:
                        print("数字超出范围,请重新输入\n")
                else:
                    print("请输入数字\n")
                if q == 1:
                    break

    else:
        print("\n只能输入数字,请重新输入\n")

    if q == 1:
        break

运行截图


3. 名片管理器

题目

名片管理器

需要完成的基本功能:

添加名片

删除名片

修改名片

查询名片

退出系统

程序运行后,除非选择退出系统,否则重复执行功能。

程序源码

python 复制代码
print("=" * 20)
print("==\t学生名片管理系统")
print("1:添加名片")
print("2:删除名片")
print("3:修改名片")
print("4:查找名片")
print("5:显示名片")
print("6:退出")
print("=" * 20)
all_li = []
while True:
    print("\n==请输入序号==")
    first_num = input(">>> ")
    if first_num.isdecimal():
        first_num = int(first_num)
        if first_num == 1:
            dic_one = {}
            print("请输入要添加的名字")
            name = input(">>> ")
            print("请输入%s的年龄" % name )
            age = input(">>>")
            print("请输入%s的学号" % name)
            stu_num = input(">>> ")
            print("请输入%s的微信" % name)
            weixin = input(">>> ")

            dic_one["name"] = name
            dic_one["age"] = age
            dic_one["stu_num"] = stu_num
            dic_one["weixin"] = weixin
            all_li.append(dic_one)
            print("==添加成功==")
        elif first_num == 2:
            while True:
                print("\n==请输入要删除的名字==")
                del_name = input(">>> ")
                count = 0
                f = 0
                for i in all_li:
                    count += 1
                    if i["name"] == del_name:
                        count -= 1
                        f = 1
                        break
                if f == 0:
                    print("找不到你要找的名字,请重新输入")
                    continue
                del all_li[count]
                print("删除成功")
                break
        elif first_num == 3:
            while True:
                print("请输入要修改的名字")
                mod_name = input(">>> ")
                count = 0
                f = 0
                for i in all_li:
                    count += 1
                    if i["name"] == mod_name:
                        count -= 1
                        f = 1
                if f == 0:
                    print("找不到你要找的名字,请重新输入")
                    continue
                print("\n==名字已找到,想修改对应此名的哪项选项==")
                print("1:名字 2:年龄 3:学号 4:微信")
                while True:
                    print("== 请输入对应的序号 ==")
                    mod_num = input(">>> ")
                    if mod_num.isdecimal():
                        mod_num = int(mod_num)
                        if mod_num == 1:
                            print("\n请输入你要修改的名字")
                            mod_name2 = input(">>> ")
                            all_li[count]["name"] = mod_name2
                            print("修改成功")
                            break
                        if mod_num == 2:
                            print("\n请输入%s的新年龄" % all_li[count]["name"])
                            mod_age = input(">>> ")
                            all_li[count]["age"] = mod_age
                            print("修改成功")
                            break
                        if mod_num == 3:
                            print("\n请输入%s的新学号" % all_li[count]["name"])
                            mod_stu_num = input(">>> ")
                            all_li[count]["stu_num"] = mod_stu_num
                            print("修改成功")
                            break
                        if mod_num == 3:
                            print("\n请输入%s的新微信" % all_li[count]["name"])
                            mod_weixin = input(">>> ")
                            all_li[count]["weixin"] = mod_weixin
                            print("修改成功")
                            break
                    else:
                        print("输入有误,重新输入")
                break
        elif first_num == 4:
            while True:
                print("\n==请输入要查找的名字==")
                c = 0
                find_name = input(">>> ")
                for i in all_li:
                    if i["name"] == find_name:
                        print("名字\t\t年龄\t\t学号\t\t微信")
                        print("%s\t\t%s\t\t%s\t\t%s"%(i["name"],i["age"],i["stu_num"],i["weixin"]))
                    else:
                        print("找不到你要找的名字请重新输入")
                        c = 1
                if c == 1:
                    continue
                break
        elif first_num == 5:
            result = "名字\t年龄\t学号\t微信"
            print(result.expandtabs(20))
            for i in all_li:
                result2 = "%s\t%s\t%s\t%s"%(i["name"],i["age"],i["stu_num"],i["weixin"])
                print(result2.expandtabs(20))
        elif first_num == 6:
            break
        else:
            print("输入超出范围,请重新输入")
    else:
        print("输入有误,请重新输入")

运行截图

4. 用户交换显示

题目

比如有如下形式的字典

city = {"北京": {"朝阳": ["望京", "大望路"], "昌平": ["沙河", "小昌平"]},

"延边": {"延吉": ["北大", "铁南"], "龙井": ["图们", "珲春"]},

"上海": {"新上海": ["浦东", "浦西"], "老上海": ["上海滩", "不夜城"]}}

完成以下要求:

允许用户增加内容

允许用户查看某一个级别的内容

即可查看内容也可修改内容

也可删除内容

每一级的循环嵌套必须包含返回上一层,也包含全部退出

程序源码

python 复制代码
city = {"北京": {"朝阳": ["望京", "大望路"], "昌平": ["沙河", "小昌平"]},
        "延边": {"延吉": ["北大", "铁南"], "龙井": ["图们", "珲春"]},
        "上海": {"新上海": ["浦东", "浦西"], "老上海": ["上海滩", "不夜城"]}}

while True:
    p = 0
    q = 0
    print("\33[35;1m一级列表\33[1m".center(50,"="))
    for i,v in enumerate(city,1):
        print(i,v)
    print("添加请按\33[31;1m A\33[1m 、查看请按\33[31;1m 序号\33[1m 、退出请按\33[31;1m Q\33[1m")
    init_cho = input(">>> ")
    if init_cho.lower() == "q":
        break
    elif init_cho.isdecimal():
        init_cho = int(init_cho)
        if init_cho > 0 and init_cho <= len(city):
            while True:
                first_li = []
                for i, v in enumerate(city, 1):
                    first_li.append(v)
                print("删除\33[31;1m%s\33[1m请按\33[31;1m Y\33[1m 、修改请按\33[31;1m M\33[1m 、返回上一级请按\33[31;1m P\33[1m 、进入下一级请按\33[31;1m N\33[1m 、全部退出请按\33[31;1m Q\33[1m"% first_li[init_cho-1])
                deci_cho = input(">>> ")
                if deci_cho.lower() == "y":
                    del city[first_li[init_cho-1]]
                    print("删除成功,自动跳回上一级")
                    break
                elif deci_cho.lower() == "q":
                    q = 1
                    break
                elif deci_cho.lower() == "p":
                    break
                elif deci_cho.lower() == "m":
                    print("您要改成什么名字?")
                    mod_sheng_name = input(">>>")
                    if mod_sheng_name.isalpha():
                        city[mod_sheng_name] = city.pop(first_li[init_cho-1])
                        print("修改成功")
                elif deci_cho.lower() == "n":
                    while True:
                        p2 = 0
                        second_li = []
                        print("\33[34;1m二级列表\33[1m".center(50,"="))
                        for x, y in enumerate(city[first_li[init_cho-1]], 1):
                            print(x, y)
                            second_li.append(y)
                        print("请按\33[31;1m序号\33[1m选择、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
                        sec_cho = input(">>> ")
                        if sec_cho.lower() == "p":
                            p = 1
                            break
                        elif sec_cho.lower() == "q":
                            q = 1
                            break
                        elif sec_cho.isdecimal():
                            sec_cho = int(sec_cho)
                            if sec_cho > 0 and sec_cho <= len(city[first_li[init_cho - 1]]):
                                while True:
                                    print("删除\33[31;1m%s\33[1m请按\33[31;1m Y\33[1m 、修改请按\33[31;1m M\33[1m 、返回上一级请按\33[31;1m P\33[1m 、进入下一级请按\33[31;1m N\33[1m 、全部退出请按\33[31;1m Q\33[1m"% second_li[sec_cho-1])
                                    third_cho = input(">>> ")
                                    if third_cho.lower() == "y":
                                        del city[first_li[init_cho-1]][second_li[sec_cho-1]]
                                        print("删除成功,自动跳回上一级")
                                        break
                                    elif third_cho.lower() == "m":
                                        print("您要改成什么名字?")
                                        mod_shi_name = input(">>>")
                                        city[first_li[init_cho - 1]][mod_shi_name] = city[first_li[init_cho - 1]].pop(second_li[sec_cho-1])
                                        print("修改成功,自动跳回上一级")
                                        break
                                    elif third_cho.lower() == "p":
                                        break
                                    elif third_cho.lower() == "q":
                                        q = 1
                                        break
                                    elif third_cho.lower() == "n":
                                        while True:
                                            print("\33[36;1m三级列表\33[1m".center(50, "="))
                                            for t, n in enumerate(city[first_li[init_cho - 1]][second_li[sec_cho - 1]], 1):
                                                print(t, n)
                                            print("请按\33[31;1m序号\33[1m选择删除或修改、添加请按 \33[31;1mA\33[1m 、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
                                            last_cho = input(">>> ")
                                            if last_cho.isdecimal():
                                                last_cho = int(last_cho)
                                                while True:
                                                    if last_cho > 0 and last_cho <= len(city[first_li[init_cho - 1]][second_li[sec_cho - 1]]):
                                                        print("删除请按 \33[31;1mD\33[1m 、修改请按 \33[31;1mM\33[1m 、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
                                                        one_more_cho = input(">>> ")
                                                        if one_more_cho.lower() == "d":
                                                            del city[first_li[init_cho - 1]][second_li[sec_cho - 1]][last_cho - 1]
                                                            print("删除成功,自动跳回上一层")
                                                            break
                                                        elif one_more_cho.lower() == "m":
                                                            print("您要改成什么名字?")
                                                            mod_last = input(">>> ")
                                                            city[first_li[init_cho - 1]][second_li[sec_cho - 1]][last_cho - 1] = mod_last
                                                            print("修改成功,自动跳回上一层")
                                                            break
                                                        elif one_more_cho.lower() == "p":
                                                            break
                                                        elif one_more_cho.lower() == "q":
                                                            q = 1
                                                            break
                                                        else:
                                                            print("输入有误,请重新输入\n")
                                                    else:
                                                        print("输入超出范围,请重新输入\n")
                                            elif last_cho.lower() == "a":
                                                print("请输入添加的名")
                                                add_last = input(">>> ")
                                                city[first_li[init_cho - 1]][second_li[sec_cho - 1]].append(add_last)
                                                print("添加成功")
                                            elif last_cho.lower() == "p":
                                                p2 = 1
                                                break
                                            elif last_cho.lower() == "q":
                                                q = 1
                                                break
                                            if q == 1:
                                                break
                                    else:
                                        print("输入有误,请重新输入\n")
                                    if q == 1:
                                        break
                                    if p2 == 1:
                                        break
                            else:
                                print("输入超出范围,请重新输入\n")
                        else:
                            print("输入有误请重新输入\n")
                        if q == 1:
                            break
                if q == 1:
                    break
                if p == 1:
                    break
        else:
            print("输入超出范围,请重新输入\n")
    elif init_cho.lower() == "a":
        while True:
            print("\33[36;1m添加信息\33[1m".center(50, "="))
            print("请输入省/直辖市、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
            add_sheng = input(">>> ")
            if add_sheng.lower() == "p":
                break
            elif add_sheng.lower() == "q":
                q = 1
                break
            elif city.get(add_sheng,0) == 0:
                city.update({add_sheng:{}})
            print("添加成功\n")
            print("请输入市/州、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
            add_shi = input(">>> ")
            if add_shi.lower() == "p":
                break
            elif add_shi.lower() == "q":
                q = 1
                break
            elif city[add_sheng].get(add_shi,0) == 0:
                city[add_sheng].update({add_shi:[]})
                print("添加成功\n")
                while True:
                    print("请输入县/街道、可多次写入、返回上一级请按\33[31;1m P\33[1m 、全部退出请按\33[31;1m Q\33[1m")
                    add_xian = input(">>> ")
                    if add_xian.lower() == "p":
                        break
                    if add_xian.lower() == "q":
                        q = 1
                        break
                    city[add_sheng][add_shi].append(add_xian)
                    print("添加成功")
            if q == 1:
                break
    elif init_cho == "5":
        print(city)
    else:
        print("输入有误,请重新输入\n")
    if q == 1:
        break

运行截图

总结

目前这四个小程序写的都是很简单的,用基础的循环嵌套,实现基础的效果,希望对大家有所帮助,同时也是欢迎大家交流探讨,继续优化完善这个程序。

相关推荐
18你磊哥6 小时前
chromedriver.exe的使用和python基本处理
开发语言·python
小坏讲微服务6 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
一水鉴天6 小时前
整体设计 定稿 之1 devOps 中台的 结论性表述(豆包助手)
服务器·数据库·人工智能
老鼠只爱大米6 小时前
Java设计模式之外观模式(Facade)详解
java·设计模式·外观模式·facade·java设计模式
闲人编程6 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
vx_dmxq2116 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
9号达人6 小时前
优惠系统演进:从"实时结算"到"所见即所得",前端传参真的鸡肋吗?
java·后端·面试
q***07146 小时前
Spring Boot 中使用 @Transactional 注解配置事务管理
数据库·spring boot·sql
AAA简单玩转程序设计7 小时前
Java进阶小妙招:ArrayList和LinkedList的"相爱相杀"
java
无垠的广袤7 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网