zoukankan      html  css  js  c++  java
  • Python 3 学习——字典以及字符串与购物车实践

    Python 学习的第四小节

     写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享

    一、笔记

      1.元组也被称为——可读列表   元组可以通过切片的方式,把值取出来 

        对于一些数据如果我们不想去修改它,可以将其建立成为元组。

      2.字典

        通过一个大括号来创建的  dic1 = {'name':'lfd','age':'22','sex':'man' }   key-value 形式存储数据  name 不可以被修改且唯一

        ①字典是无序存储的  ②键唯一,key必须是可哈希的(不可变类型)数字、字符串、元组③value值也可以是字典

        dic = {'name':'liufeiduo','age':'22','sex':'man','loving':'basketball','ishandsome':True}

        print(dic['name'])

        字典的操作:

          增:

           ①  dic1 = {'name':'liufeiduo'}

              dic1['age'] = '22'    这样就为字典dic1内部增加了一个键值对,如果键存在的化,那么为修改操作。

               ②  使用setdefault( )  方法进行增加,setdefault()是有返回值的。

              dic1.setdefault('age',34)  对字典的一个设定,如果存在键age,那么将不修改其值。如果没有,加入进去。

          查:

           ①  通过键去查询。 print(dic1['name'])  print(dic1.get('name'))  

           ②  还有一些方法。 list(dic1.items()) dic1.keys() dic1.values() 取出来的值并不是list类型的值,需要进行一次转换

          改:

           ①  dic1['age'] = 23 更改的方式同列表修改类似

           ②  update修改方法  dic2 = {‘name':'xiaofeifei','age':'18','hobby':'sing and dance'}

                          dic1.update(dic2)  之后 dic1与dic2中重复的键都被dic2中的值所覆盖,不存在的键添加上去。

          删:

           ①  del dic1['name']  直接删除某一键下的值  del dic1 删除整个字典

           ②  dic1.clear 就剩下一个空的字典了,和列表的方法也差不多

           ③  dic1.pop('age') 删除指定键值对并返回该键值对的值  dic1.popitem() 随机删除一组键值对并以元组返回值 

          某些其它操作:

            dic3 = dict.fromkeys(['host1','host2','host3'],'test')

            print(dic3) #{'host1':'test','host2':'test','host3':'test'}  用的不多  

      3.字典的嵌套   

    # av_catalog = {
    # "欧美":{
    # "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
    # "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
    # "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
    # "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    # },
    # "日韩":{
    # "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    # },
    # "大陆":{
    # "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    # }
    # }

      4.字典的排序

        根据你的键来排序

        sorted(dic1) 也可以  sorted(dic1.values())  进行排序

      5.字典的遍历

       for i in dic1:

        print(i) 默认循环遍历字典的键

      

       for i in dic1:

        print(i,dic1[i]) 打印的键,和键值      相比于后者,效率高一点

       

       for i,v in dic1.items()

        print( i , v )  打印值

      6.id()  方法  打印内存地址

      7.不可变类型:整型 字符串 元组    可变类型: 列表  字典  

      8.字符串

        String  操作 

          ①重复输出字符串 print('woailiufeiduo' * 20)

          ②通过索引和切片的方式取出字符串中的字符 print('hello world' [2:])

          ③判断字符在不在字符串当中 print('e21' in 'hello')  返回的是False

          ④格式字符串 print('%s is a good man'%'liufeiduo') 

          ⑤字符串拼接 a = '123' b = 'abc'  c = a+b  or   c = ' '.join([a,b])  通过'  '内部的字符串将其拼接起来

        字符串的内置方法   

    #摘一些重要的字符串方法
    #1 print(st.count('l'))
    # print(st.center(50,'#')) # 居中
    # print(st.startswith('he')) # 判断是否以某个内容开头 重要
    # print(st.find('t'))
    # print(st.format(name='alex',age=37)) # 格式化输出的另一种方式 待定:?:{}
    # print('My tLtle'.lower())
    # print('My tLtle'.upper())
    # print(' My tLtle '.strip())
    # print('My title title'.replace('itle','lesson',1))
    # print('My title title'.split('i',1))

     

    二、实践学习

      购物车需求:

        1.首先输入用户的工资。
    2.然后弹出购物菜单
    购物菜单格式为 1. iphone 5000 这种
    有若干商品和价格的列表
    3.让用户输入 输入要购买的商品
    4.判断用户是否买的起,买不起,提示余额不足但不退出程序,继续显示菜单。
    5.买的起的话,把买的东西加到购物车中,并显示当前余额。
    6.继续进行购买菜单
    7.购物菜单有一个退出选项
    8.用户选择了退出选项后,打印已经购买的东西,价格以及余额。
    9.欢迎下次光临

    思路:
    输入用户工资用input,int强转成整数形进行运算。
    购物菜单使用列表来进行显示 使用两个列表一个物品,一个价格。
    用户输入想要的物品,这里需要一个大循环不断循环输入,然后用判断。
    若用户买的起,将买的东西加入一个新的列表中,花费的价格也加入一个新的列表
    用户余额大于商品价格的产品才能加入到新的列表中,不然不能加入。
    退出选项后,打印新的物品列表,价格列表。并计算余额。
    --------------------------------------------------------------------
     思路为最初拿到这道题的思路 之后的思路为通过讲解分析这道题的思路
    代码实现:
    budget_user = input("please enter your budget: ") #budget_user 用户的预算
    budget_user = int(budget_user) #将字符串类型转换为整型方便之后的运算
    # 下面是购物菜单的搭建
    commodity = ["iphone","mac book","kindle","coffee","Python book","computer"] #商品菜单的搭建

    price = ["6500","10000","558","35","50","9500"] #价格菜单的搭建

    print("---------------购物菜单--------------")
    for i in range(0,6):
    print(i,commodity[i],price[i])
    print("q","退出购物菜单")
    print("---------------购物菜单--------------")

    #开始进行用户输入部分的代码
    bought = [] # 已买清单
    new_price = [] # 花费的钱

    while True:
    select = input("Please enter your select: ")
    if select == "q":#设置用户输入q退出购物菜单
    print("您已经购买了",bought)
    print("您所购买的商品价格为",new_price)
    print("您的余额为",budget_user)
    print("------------欢迎您下次光临------------")
    break
    else:
    select = int(select)
    if budget_user > int(price[select]):#判断用户余额是否大于商品价格
    bought.append(commodity[select])#将已经购买的商品存入已买清单
    new_price.append(price[select])#将已买商品的价格存起来
    budget_user = budget_user - int(price[select])#将余额计算出来
    print("购买成功",budget_user)
    else:
    print("余额不足")
    以上代码为初代代码,仅仅能实现功能,但还有不少的漏洞,例如对输入select选择数字的类型判断等

    思路:
      在进行购物菜单的搭建时,不使用两个列表来进行构建,使用列表嵌套的形式来进行搭建。
      例如[["mac book",5000],["kindle",558],...]
      对用户输入的预算进行一个字符判断,防止输入了非法字符 saving.isdigit()。
      
    然后要对字符串类型的预算进行一个强制转换成int类型,方便运算。int()
      在商品序号的时候使用了enumerate()方法。
    代码实现:
    product_list=[
    ('Mac',9000),
    ('kindle',800),
    ('tesla',900000),
    ('python book',105),
    ('bike',2000),

    ]
    saving=input('please input your money:')
    shopping_car=[]
    if saving.isdigit():
    saving=int(saving)
    while True:
    #打印商品内容
    for i,v in enumerate(product_list,1):
    print(i,'>>>>',v)

    #引导用户选择商品
    choice=input('选择购买商品编号[退出:q]:')

    #验证输入是否合法
    if choice.isdigit():
    choice=int(choice)
    if choice>0 and choice<=len(product_list):
    #将用户选择商品通过choice取出来
    p_item=product_list[choice-1]

    #如果钱够,用本金saving减去该商品价格,并将该商品加入购物车
    if p_item[1]<saving:
    saving-=p_item[1]

    shopping_car.append(p_item)

    else:
    print('余额不足,还剩%s'%saving)
    print(p_item)
    else:
    print('编码不存在')
    elif choice=='q':
    print('------------您已经购买如下商品----------------')
    #循环遍历购物车里的商品,购物车存放的是已买商品
    for i in shopping_car:
    print(i)
    print('您还剩%s元钱'%saving)
    break
    else:
    print('invalid input')
    以上为改进后的代码。

      
    三、心得
      发现代码还是要自己写,自己亲手去写一段程序,哪怕你看起来逻辑很简单的程序,在写上面那段程序时,
    最初还因为while循环一直卡住了,发现了一些很小的问题,但如果不亲自动手去写的话恐怕也就发现不了了,
    其余的学习还在一步一步踏踏实实的进行着,有时候在学习的过程中会分心,会干别的,这是接下来的学习要
    避免的东西。



  • 相关阅读:
    从Active Directory中获取用户信息
    BindingNavigator & BindingSource Classes in VS2005
    New patterns & practices for Visual Studio 2005 and .NET 2.0
    Logging application block of Enterprise Library 2.0
    Pocket C# Project
    Enterprise Library 1.0 HandsOn Labs
    Visual Studio 2005 Team System Technical Articles from MSDN
    Web Services Enhancements (WSE) 3.0 Released!
    更新Active Directory/Exchange Address Book的小工具
    Android 菜单项选项
  • 原文地址:https://www.cnblogs.com/jinzejun/p/8439857.html
Copyright © 2011-2022 走看看