从零学习python - 05实例练习

第一阶段

# 超市结账

print('-------欢迎光临xx超市-------')

total = 1  # 总购买物品
amount = 0  # 总金额
nums = 0  # 所有物品的数量总和

while True:
    money = float(input(f'请输入商品{total}单价:\n'))
    num = int(input(f'请输入物品{total}数量:\n'))
    amount += money * num
    nums += num
    answer = input('输入(q)退出系统,按(enter键)继续结账:')
    if answer == 'q':
        break
    total += 1

print(f'完成{total}种商品总计{nums}件的结账,总金额为{amount}元.欢迎下次光临!')

# 猜数字

ran = random.randint(1, 100)
print(ran)

count = 0
while True:
    count += 1
    num = int(input('请输入1-100的数字进行猜测:'))
    if num == ran:
        if count == 1:
            print(f'只用了{count}次就猜对了,你他妈真行!')
        elif 1 < count < 6:
            print(f'用了{count}次机会,运气不错,小火汁!')
        else:
            print(f'运气太差了吧,猜了{count}次,回去种地吧')
        break
    elif num < 0 or num > 100:
        print('输入数字错误,请重新输入!')
    elif num > ran:
        print('猜大了!小点')
    elif num < ran:
        print('猜小了!大点')

# 猜拳 三局两胜

n = 1
pe_num = 0
ran_num = 0
while n <= 3:
    ran = random.randint(0, 2)
    print(ran)
    pe = int(input('请出招:石头(0)剪刀(1)布(2):\n'))
    if (pe == 0 and ran == 1) or (pe == 1 and ran == 2) or (pe == 2 and ran == 0):
        print('本轮you win!')
        pe_num += 1
    elif (ran == 0 and pe == 1) or (ran == 1 and pe == 2) or (ran == 2 and pe == 0):
        print('本轮you lose!')
        ran_num += 1
    else:
        print('本轮平局!')
    n += 1
# 胜负对比
if pe_num > ran_num:
    print('你代表人类获胜!')
elif ran_num > pe_num:
    print('电脑获胜')
else:
    print('双方平局')

# 登录 for...else name:admin password:1234

# for...else 与 while...else只有不被中断(break不执行)的情况下,else才会被执行

for i in range(3):
    username = input('请输入用户名:')
    password = input('请输入密码:')
    if username == 'admin' and password == '1234':
        print('账号密码正确 登陆成功!')
        break  # 跳出循环
    print('账号密码有误 登录失败')
else:   # 如果for循环没有出现中断(break没有执行)的话,那么else才会被执行
    print('三次登录失败 账号已被锁定!')

# 掷色子游戏

money = 0
while True:
    se1 = random.randint(1, 6)
    se2 = random.randint(1, 6)
    print('----------欢迎来到小胖赌场----------')
    print(f'您目前金币余额为{money}个')
    if money < 10:
        print(f'您目前金币余额为{money}个,请尽快进行充值!')
    elif money == 0:
        print(f'您目前金币为{0},无法开始正常游戏!将自动退出本平台!')
        break
    in1 = input('请输入对应标号进行操作(1/开始游戏)-(2/充值金币)-(3/退出游戏):')
    if in1 == '1':
        if money == 0:
            print('您的金币不足,无法进行游戏!')
            break
        else:
            while True:
                ya = input('押小请输入1,押大请输入2,退出游戏请输入3:')
                print(f'开盖-骰子一为"{se1}",骰子二为"{se2}"')
                if ya == '3':
                    print('退出游戏大厅!')
                    break
                elif ya == '1' and se1 + se2 <= 6:
                    money += 2
                    print(f'恭喜您!游戏胜利获得2金币奖励,您的余额为{money}')
                    money -= 1
                    print(f'游戏结束后会自动扣除锅底,游戏锅底为1金币,您的余额为{money}')
                elif ya == '2' and se1 + se2 > 6:
                    money += 2
                    print(f'恭喜您!游戏胜利获得2金币奖励,您的余额为{money}')
                    money -= 1
                    print(f'游戏结束后会自动扣除锅底,游戏锅底为1金币,您的余额为{money}')
                else:
                    money - 1
                    print(f'很遗憾,您押错了,自动扣除1元锅底,您的余额为{money}')
    if in1 == '2':
        chong = int(input('请输入充值金额\n(一块钱为1金币-充值金币必须为5的倍数才可以充值):'))
        if chong % 5 == 0:
            money += chong
            print(f'充值成功:金币余额{money}元!')
        else:
            print(f'您的充值金额{chong}不满足要求,无法进行充值!')
    if in1 == '3':
        print('退出游戏,欢迎下次光临')
        break

# 嵌套循环打印图形

for i in range(1, 6):
    for j in range(i):
        print('*', end='')
    print()

第二阶段

# id(变量) 返回变量所存放的内存地址
# 变量A is 变量B 比较两者内存地址返回Boolean值
# 如果内存池中已经有了定义好的变量,后续再次定义变量赋值已经存在的内容时,为了节省内存空间会先在内存池中找到并赋值,
# a = 1 b = a c = 1 a = b = c
# String截取切片 Strint(start:end:step]会返回索引值start到end的字符(左闭右开)

# 截取图片名称 find('元素')从左往右找第一个元素,没找到返回-1 rfind('元素')从右往左找第一个元素,没找到返回-1
# index('元素')也是查找的方法,
# count('元素')统计元素有多少个并返回,没找到报错
# startswith('元素')判断是否以元素开头,返回Boolean endswith('元素')判断是否以元素结尾,返回Boolean
# isalpha(字符串)如果字符串是纯字母则返回True isdigit(字符串)如果字符串是纯数字则返回True
# isalnum(字符串)如果字符串是字母或数字则返回True isspace(字符串)字符串为空格组成则返回True
# isupper(字符串)如果字符串全部是大写则返回True islower(字符串)字符串全为小写则返回True

# 模拟文件上传

判断输入的文件名称是否大于六位,扩展名是否为.jpg .gif .png格式 如果名字不满足格式则随机生成6位字符串

str1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
fix_name = ''
while True:
    file_name = input('请输入上传文佳名称(加扩展名):')
    i = file_name.find('.')
    if file_name.endswith('.jpg') or file_name.endswith('.gif') or file_name.endswith('.png'):
        if len(file_name[:i]) < 6:
            for x in range(6):
                index = random.randint(0, len(str1)-1)
                fix_name += str1[index]
            fix_name = fix_name + file_name[i:]
            print(f'文件名小于六位不符合规定,自动生成新文件名为{fix_name}')
            print('文件上传成功!')
            break
    else:
        print('文件扩展名异常,上传失败!')

# 模拟登录验证

用户名或手机号+密码登录 用户名全部小写-首字母不能为数字-长度必须6位以上 手机号码11位的纯数字 密码必须是6位数字

# 方法一:
while True:
    choice = input('输入1选择用户名登录,输入2选择手机号登录:')
    if choice == '1':
        username = input('请输入用户名:')
        if username.islower() and username[0].isalpha() and len(username) >= 6:
            password = input('请输入密码:')
            if password.isdigit() and len(password) == 6:
                print(f'登录成功,登录账号:<{username}>,登录密码位<{password}>')
                break
            else:
                print('密码必须位六位纯数字!请重新输入')
        else:
            print('用户名输入有误,请核对后再次输入!')
    elif choice == '2':
        tel = input('请输入手机号:')
        if tel.isdigit() and len(tel) == 11:
            password = input('请输入密码:')
            if password.isdigit() and len(password) == 6:
                print(f'登录成功,登录账号:<{tel}>,登录密码位<{password}>')
                break
            else:
                print('密码必须位六位纯数字!请重新输入')
        else:
            print('手机号格式有误,请核对后再次输入!')
    else:
        print('所输入选择有误,请重试!')
# 方法二
flag = True
while flag:
    username = input('请输入用户名或密码:')
    if (username.islower() and username[0].isalpha() and len(username)) >= 6 
            or (username.isdigit() and len(username) == 11):
        while True:
            password = input('请输入密码:')
            if password.isdigit() and len(password) == 6:
                print('登录成功!')
                flag = False
                break
            else:
                print('密码格式错误,请核对后再次输入!')
    else:
        print('用户名不符合格式,请核对后再次输入!')
# replace(old, new, count)替换内容,默认全部替换,count可以指定替换次数
# split(分隔符)根据分隔符切割,结果放到list列表中 rsplit(分隔符)根据分隔符右切割,结果放到list列表中
# splitlines()按一行一行进行分割 partition(分隔符)将字符串分割为三部分(分隔符左边内容 - 分隔符 - 分隔符右边内容)以元组形式返回
# capitalize()将字符串首个字母大写 title()将字符串每个单词的首字母大写 upper()将字符串所有字母转大写 lower()将字符串所有字母转小写
# strip('给定')去除字符串首尾指定的字符

# 模拟论坛

msg = input('请提出话题:')
print('-'*50)
print('以下为回复内容:')
while True:
    username = input('请输入用户名:')
    while True:
        answer = input('请输入回复内容:')
        answer = answer.strip()
        # 验证内容  回复不能为空 不能存在敏感词汇 最多评论20个字 回复内容前后不能有空格
        if len(answer) != 0:
            if len(answer) <= 20:
                answer = answer.replace('操', '**')
                print(f'<{username}>用户留言:\n\t{answer}')
                break
            else:
                print('您的评论超过20字,请缩减您的评论字数!')
        else:
            print('您的评论不能为空,请检查您的评论!')

第三阶段

# 列表添加: append('元素')列表追加\添加 list1+list2 表示两个列表合并拼接 extend(list) 将list中的列表合并添加到调用此方法的列表中
# 列表删除: pop(index)如果无法找到列表下标元素则报错,默认从后往前依次删除 remove(value)删除列表中指定元素-非下标(默认值删除第一个) clear()清空列表
# 列表插入: insert(index,元素)在index位置插入元素 index(元素)查找后返回元素的坐标
# 列表查找: list.count(元素)返回所查找元素的个数 元素 in list 返回bool,表示元素是否在列表中 \ 元素 not in list
# del list[index]:如果有index则表示删除这个下标指向的元素 如果没有index则表示删除list的指针指向
# 排序和反转: list.sort()默认升序排序 list.sort(reverse=Ture)reverse默认false当其为True时表示列表降序排列 list.reverse()表示将当前list进行反转
# 交叉赋值: a, b, c = a, a, a

# 买多件商品最后打印多件商品信息

flag = True
shopping_car = []
total = 0
shop_sum = 0
while flag:
    name = input('请输入宁所购买的商品名称:')
    price = float(input('请输入该物品单价:'))
    count = int(input('请输入购买该物品个数:'))
    amount = price * count
    goods = [name, price, count, amount]
    # 将上方小节添加到我们总账单中
    shopping_car.append(goods)
    answer = input('按Q(q)退出结算,继续结账请按任意键:')
    if answer.lower() == 'q':
        flag = False
print('名称\t价格\t数量')
for good in shopping_car:
    print(f'{good[0]}\t {good[1]}\t {good[2]}\t')
    total += 1
    shop_sum += good[3]
print(f'共{total}件商品,总价为{shop_sum}元')

# 删除列表重复元素

# 方法一:
total = ['面包', '面包', '巧克力', '方便面', '辣条', '酸奶', '方便面', '面包']
n = 0
while n < len(total):
    if total[n] == '面包':
        total.remove('面包')
    else:
        n += 1
print(total)
# 方法二:
total = ['面包', '面包', '巧克力', '方便面', '辣条', '酸奶', '方便面', '面包']
for i in total[::-1]:
    if i == '面包':
        total.remove(i)
print(total)

# 随机生成1-100的整数并排序,将键盘输入的数字插入到这个list中

# 方法一:
nums = []
for i in range(8):
    ran = random.randint(1, 100)
    nums.append(ran)
print('插入之前:', nums)
num = int(input('请输入1-100的整数插入到列表中:'))
nums.append(num)
nums.sort()
print('插入之后:', nums)
# 方法二:
nums = [5, 2, 7, 8, 4, 1, 3, 6, 9]
for i in range(0, len(nums)-1):
    for j in range(0, len(nums)-1-i):
        if nums[j] > nums[j+1]:
            a = nums[j]
            nums[j] = nums[j+1]
            nums[j+1] = a
print(nums)

# lol角色管理系统

1-添加英雄,2-删除英雄.3-修改英雄,4-查询英雄,5-显示所有英雄,6-退出系统

print('--------欢迎使用lol英雄角色管理系统--------')
hero_all = []
while True:
    print('1:添加英雄\n2:删除英雄\n3:修改英雄\n4:查询英雄\n5:显示所有英雄\n6:退出系统')
    choice = input('请输入指令:')
    if choice == '1':
        name = input('请输入英雄名称:')
        location = input('请输入英雄位置:')
        sex = input('请输入英雄性别:')
        hero = [name, location, sex]
        hero_all.append(hero)
    elif choice == '2':
        del_hero_name = input('请输入要删除的英雄名称:')
        for hero in hero_all:
            if del_hero_name in hero:
                hero_all.remove(hero)
            else:
                print('系统中并无此英雄,请检查!')
    elif choice == '3':
        fix_hero_name = input('请输入要修改的英雄名称:')
        for hero in hero_all:
            if fix_hero_name in hero:
                name = input('请输入修改后英雄名称:')
                location = input('请输入修改后英雄位置:')
                sex = input('请输入修改后英雄性别:')
                hero = [name, location, sex]
                hero_all.append(hero)
            else:
                print('系统中并无此英雄,请检查!')
    elif choice == '4':
        select_hero_name = input('请输入要查询的英雄名称:')
        for hero in hero_all:
            if select_hero_name == hero[0]:
                print('查询结果将在下方显示:')
                print(hero[0], hero[1], hero[2])
            else:
                print('系统中并无此英雄,请检查!')
    elif choice == '5':
        for hero in hero_all:
            print('全部英雄信息如下:')
            print(hero[0], hero[1], hero[2])
    elif choice == '6':
        print('正在断开连接,请稍等...')
        time.sleep(3)
        print('退出成功!')
        break
    else:
        print('输入指令错误,请检查!')

第四阶段

# dict与set的区别

在于一个用逗号分割,一个用冒号分割

s = {1, 1}
print(type(s))  #   <class 'set'>

b = {
    1: 1
}
print(type(b))  #   <class 'dict'>
# dict删除 dict.pop(key)根据key删除 dict.popitem()自动删除末尾数据
# dict获取 dict.get(key)根据key查找对应value并返回 dict.keys()返回所有key dict.values()返回所有value
# dict.items()按元组返回字典内存放数据 常用遍历方法 for k,v in dict.items()
# dict添加 dict[key] = value dict.setdefault(k,v)设置一个字典没有的k对应的默认v dict1.update(dict2)将dict2更新到dict1中

# 添加三本书

不能有同名书籍 书名,作者,价格

books = []
book_dict = {}
while True:
    answer = input('输入指令进行操作:1-添加    2-显示所有    3-退出系统:')
    if answer == '1':
        book_name = input('请输入书本名称:')
        for book in books:
            if book_name == book.get('name'):
                print('书名重复!添加失败!')
                break
        else:
            book_autor = input('请输入书本作者:')
            book_price = input('请输入书本价格:')
            books.append({
                'name': book_name,
                'autor': book_autor,
                'price': book_price
             })
    elif answer == '2':
        print('查询书单如下:')
        for book in books:
            print(book)
    elif answer == '3':
        print('正在退出...')
        time.sleep(2)
        print('退出成功')
        break
    else:
        print('指令输入错误!')
# 集合set删除 set.remove(key)没有key报错 set.discard(key)没有不报错 set.pop()随机删除 clear()清空集合
# 集合set 返回交集intersection符号'&' 返回并集union()符号'|' 返回差集difference()符号'-'

# 随机产生五组数字字母组成的验证码,不允许重复

verification_code = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
code_list = set()
while True:
    code = ''
    for i in range(4):
        #   choice(char)从字符串中随机取出一个值
        result = random.choice(verification_code)
        code += result
    code_list.add(code)
    if len(code_list) == 5:
        break
print(code_list)

# 图书管理系统

library = [
    {'书名': '活着', '作者': '余华', '价格': 25, '数量': 10},
    {'书名': '生死疲劳', '作者': '莫言', '价格': 28, '数量': 10},
    {'书名': '罗生门', '作者': '芥川龙之介', '价格': 16, '数量': 10},
    {'书名': '许三观卖血记', '作者': '余华', '价格': 22, '数量': 10},
    {'书名': '理想国', '作者': '柏拉图', '价格': 12, '数量': 10},
    {'书名': '理想国', '作者': '格瓦拉', '价格': 12, '数量': 10},
    {'书名': '红楼梦', '作者': '曹雪芹', '价格': 120, '数量': 2},
    {'书名': '西游记', '作者': '吴承恩', '价格': 81, '数量': 1},
    {'书名': '余华', '作者': '周星驰', '价格': 8, '数量': 2},
]

print('<----------欢迎使用图书管理系统:---------->')
while True:
    choice = input('1-借书 2-还书 3-查询 4-查看所有 5-退出:\n请输入对应指令:')
    if choice == '1':
        while True:
            borrow_bookName = input('请输入书名:')
            count = 0  # 用于记录通过书名查到了几本书
            book_num = 0  # 用于记录图书库存
            for book in library:
                if book.get('数量') > 0 and borrow_bookName == book.get('书名'):
                    #   输入书名后先将书籍信息查询结果显示在命令行中 方便用户后续操作
                    print(
                        f'书名:{book.get("书名")},作者:{book.get("作者")},价格:{book.get("价格")},库存:{book.get("数量")}')
                    count += 1

                if book.get('数量') == 0 and borrow_bookName == book.get('书名'):  # 有书但库存没有
                    book_num += 1   # 如果该书存在但暂无库存则+1
                    print(f'<{borrow_bookName}>书籍暂无库存,请向管理员反应!')
                    print('')
                    break

            if count == 0 and book_num == 0:  # 没有找到书的情况
                print(f'未找到<{borrow_bookName}>书籍,请向管理员反应!')
                print('')

            if count > 1:  # 找到多本同名书的情况
                author_name = input('请输入作者姓名确认书籍选项:')
                for book in library:
                    if book.get('数量') > 0 and borrow_bookName == book.get('书名') and author_name == book.get('作者'):
                        book['数量'] -= 1
                        print(f'成功借到作者:{author_name} 所著 <{borrow_bookName}>,当前库存:{book.get("数量")}')
                        print('')
                        break
                else:  # 当未找到同名书籍的作者时
                    print(f'仓库中未找到作者-{author_name} 所著 <{borrow_bookName}>,请向管理员反应!')
                    print('')
                    break

            if count == 1:  # 找到一本书的情况
                for book in library:
                    if book.get('数量') > 0 and borrow_bookName == book.get('书名'):
                        book['数量'] -= 1
                        print(f'成功借到作者:{book.get("作者")} 所著 <{borrow_bookName}>,当前库存:{book.get("数量")}')
                        print('')
                        break
            break  # 跳出输入书名循环

    elif choice == '2':
        back_bookName = input('请输入要还的书名:')
        back_authorName = input('请输入此书的作者:')
        for book in library:
            if back_bookName == book.get('书名') and back_authorName == book.get('作者'):
                # 如果书名和作者都符合则判断还书成功 该书库存数量+1
                book['数量'] += 1
                print(f'成功还书!作者:{back_authorName} 所著 <{back_bookName}>,当前库存:{book.get("数量")}')
                print('')
                break
        else:
            print(f'未找到{back_authorName} 所著 {back_bookName},请检查输入是否正确!')
            print('')

    elif choice == '3':
        search_key = input('请输入要查询的书名(或作者名):')
        search_list = []
        for book in library:  # 循环将符合条件的书添加到空列表中
            if search_key == book.get('书名') or search_key == book.get('作者'):
                search_list.append(book)

        print(f'根据关键字 -{search_key}- 查询到结果如下:')
        for search_book in search_list:
            print(
                f'\t书名:{search_book.get("书名")},作者:{search_book.get("作者")},价格:{search_book.get("价格")},库存:{search_book.get("数量")}')
        print('')

    elif choice == '4':
        print('图书馆系统全部书籍 查询到结果如下:')
        for book in library:
            print(
                f'\t书名:{book.get("书名")},作者:{book.get("作者")},价格:{book.get("价格")},库存:{book.get("数量")}')
        print('')

    elif choice == '5':
        print('已退出图书管理系统,欢迎下次使用!')
        break

    else:
        print('指令输入错误,请检查!')

# 列表推导式

num_list = [num for num in range(1, 101)]    # 打印1-100的数字
print(num_list[0: 3])   # [1, 2, 3]
cut_list = [num_list[i: i+3] for i in range(0, len(num_list), 3)]   # 使用切片实现三个数分割
print(cut_list)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OtnIOs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值