12

2019-02-19  本文已影响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()。

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

最后完整的程序为:

上一篇下一篇

猜你喜欢

热点阅读