12

作者: 可爱叽叽 | 来源:发表于2019-02-19 21:40 被阅读0次

    ——浅copy的补充内容——

    浅copy的意思就是说,第二个列表的每个元素是第一个列表的每个元素的一个引用而已。

    总结一下浅copy的三种方法:

    ①用copy模块中的copy函数,即copy.copy(x)。

    ②完全切片,即列表名[ : ]。

    ③利用工厂函数list函数

    我们来实践一下:

    那么浅copy到底有什么用呢?

    浅copy可以用来创建联合账号

    举个例子:我们现在有这样一个模板,person=["names",["saving",100]],然后通过浅copy可以复制两个列表person1和person2,假设这个模板是一个夫妻共同创建的银行联合账号,我们通过修改列表person1和person2中的第0个元素,可以将这两个列表归为两人各自所属账号,即person1的持有人为“张三”,person2的持有人为“李四”,但是你想一下,比如张三从账上取了30元之后,李四会同样收到短信账上减少30元,也就是说,这个账号存款的数目变化是一致的,即修改列表的第1个元素中的第一个元素时,person1和person2两个账号要发生同样的变化,在这里就用到了浅copy的性质,修改第一层的时候是互不影响的,但是修改第二层的时候是发生相同变化的。

    ——元组——

    元组是不能增删改,只能查和切片的列表。

    元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

    语法:names=("anqila","daji","diaochan","wangzhaojun")   注意:元组是单括号。

    元组只有2个方法,一个是count,一个是index。

    ——购物车程序——

    需求:

    1.启动程序后,让用户输入工资,然后打印商品列表;

    2.允许用户根据商品编号购买商品;

    3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒;

    4.可随时退出,退出时,打印已购买的商品和余额。

    接下来我们就一步步来实现这个程序:

    首先我们要存储这些商品信息,商品列表是动态的,不是固定不变的,所以要存储这些商品信息,考虑选择用列表进行存储,而非字符串等等。商品的信息包括商品名称和商品的价格,所以列表里面要再进行嵌套列表。

    接下来,就是输入你的工资,工资只在启动程序后输入一次,并不是每次循环都要输入工资,所以输入工资的语句应该放在循环外面。这里注意一个问题,你输入的工资默认为字符串的格式,如果你输入的为数字,例如3000等,进行强制转换为整型,没有任何问题;但是如果你输入的为类似“hdui”这样的字符串,如果强制进行类型转换,转换为整型,则会报错。解决办法是,在这里作一个判断,如果你输入的为数字,才会转换为整型,用if salary.isdigit():,这个语句的意思是,虽然默认你输入的为字符串格式,但是如果你输入的为数字的类型,则这个if语句就判断为真,这时候再进行类型转换操作,salary=int(salary)。

    输入工资之后就要进入循环,打印商品列表,那么怎么打印商品列表呢?我们可以考虑用for循环打印商品列表

    但是这样存在的一个问题是,没有商品的编号,怎样才能加上商品的编号呢?我们想到用输出商品的下标的方式作为商品编号,将商品的下标和商品的信息同时进行打印:

    除此之外,还有一种方法是这样的:

    enumerate是枚举的意思,对一个列表进行枚举,会输出(下标,列表内容)这样的一组元组。如下图:

    打印了商品列表之后,接下来的一步是,用户根据商品编号选择商品。这里就要分情况讨论了:①用户输入的是数字,接下来判断是否可以购买所选定的商品;②用户输入的是"Q",则退出循环,打印所选的商品和余额;③用户输入的是其他的字符串,这时候就要显示 “非法输入”。

    接下来,我们详细说明第一种情况,即用户输入的是数字的情况:

    首先还是要先进行一个判断,判断输入的字符串是否为数字的类型,若是,则强制转换为整型。转换为整型之后,要再进行一个判断,这个判断所做的工作是,判断这个数字是否在商品编号的范围内,有可能输入的是商品编号范围以外的数字,若是这种情况,就要显示“没有找到您所选的商品”。若是商品编号范围内的数字,这时候就要进行价格的比较,首先你要获取到商品编号所指定商品的价格,然后这个价格跟你的工资进行比较,此时又分为两种情况:一种是买的起,此时就要将你的工资进行扣除,并且显示“已将某某商品加入购物车”,另一种情况是买不起,此时就要显示“您的余额已不足”。这部分的程序如下:

    说明几点:①在判断所输入的数字是否在商品编号范围内是,最好不要写xxx<8类似的写成是数字,这样就写死了,后期不好进行修改,最好是获取到这个列表的长度,然后什么什么小于列表长度,获取列表长度的方法:len()。②买得起的情况下,要把所买的商品信息加入到所购买的商品列表里,所以要建一个空列表来存所购买的商品,这个空列表要建在程序一开始的时候,不能建在循环内。

    下面我们来说当输入为"Q"时的情况:

    在这种情况下,只需要打印输出所购买的商品和余额即可,然后退出,退出的方法为:exit()。

    最后一种情况就是,当你输入的是其他字符串时,只需要显示“非法输入”即可。

    最后完整的程序为:

    相关文章

      网友评论

          本文标题:12

          本文链接:https://www.haomeiwen.com/subject/rqhaeqtx.html