python 3 day2(下)

对一、今天主要讲的是python中浅copy和深copy的用法和区别。如下图,使用copy可以完整的复制一个列表。

 

 

将下标为3的值alex更改为ALEXANDER的方法为 names[3][0] = 更改后的值(注意后面一个下标0为小列表中alex下标位置的意思)

此时的打印结果为:

我们会发现“向鹏”在names和name2中选择性copy了,但是ALEXANDER在1和2 中都被copy了。说明copy只是浅copy只copy了第一层。

如果我更改了name2的值,names会跟着被copy吗?答案是会。

如果需要完完全全的复制一份列表应该怎么操作?

 

再看看步长切片的应用:

结果如下,隔一个值取一个:

 

2.元组

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

语法:

 

它只有2个方法,一个是count,一个是index,完毕。

程序练习

请闭眼写出以下程序

程序:购物车程序

需求:

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

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

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

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

 先理清一个程序的主要逻辑思路之后,你会发现通过不断的积累这些逻辑思维,写起程序来不再是一脸茫然了。

但此时我们会发现,运行结果中没有产品编号,只能运行一次:

由于这些产品在列表中有下标,我们可以使用下标来当产品编号:

将print改为上图所示后,运行结果我们可以看出,下标出来了:

 还有更为简便的写法,即使用enumerate将列表中数据的下标直接取出来:

 

完善之后的简易版程序脚本是这样的:

仔细看会发现,这个程序目前只考虑了买的起的情况,不涉及买不起的情况,如果买不起应该怎样去写呢?很简单,只需在Added那行代码下面新增一个else:

运行结果显示如下:

 

那么问题又来了,程序不可能无止境的运行下去,如果想退出该程序,应该如何操作呢?

 

二、字符串操作

 复制代码

name.capitalize()  首字母大写
name.casefold()   大写全部变小写
name.center(50,"-")  输出 '---------------------Alex Li----------------------'
name.count('lex') 统计 lex出现次数
name.encode()  将字符串编码成bytes格式
name.endswith("Li")  判断字符串是否以 Li结尾
 "Alex\tLi".expandtabs(10) 输出'Alex      Li', 将\t转换成多长的空格 
 name.find('A')  查找A,找到返回其索引, 找不到返回-1 

format :
    >>> msg = "my name is {}, and age is {}"
    >>> msg.format("alex",22)
    'my name is alex, and age is 22'
    >>> msg = "my name is {1}, and age is {0}"
    >>> msg.format("alex",22)
    'my name is 22, and age is alex'
    >>> msg = "my name is {name}, and age is {age}"
    >>> msg.format(age=22,name="ale")
    'my name is ale, and age is 22'
format_map
    >>> msg.format_map({'name':'alex','age':22})
    'my name is alex, and age is 22'


msg.index('a')  返回a所在字符串的索引
'9aA'.isalnum()   True

'9'.isdigit() 是否整数
name.isnumeric  
name.isprintable
name.isspace
name.istitle
name.isupper
 "|".join(['alex','jack','rain'])
'alex|jack|rain'


maketrans
    >>> intab = "aeiou"  #This is the string having actual characters. 
    >>> outtab = "12345" #This is the string having corresponding mapping character
    >>> trantab = str.maketrans(intab, outtab)
    >>> 
    >>> str = "this is string example....wow!!!"
    >>> str.translate(trantab)
    'th3s 3s str3ng 2x1mpl2....w4w!!!'

 msg.partition('is')   输出 ('my name ', 'is', ' {name}, and age is {age}') 

 >>> "alex li, chinese name is lijie".replace("li","LI",1)
     'alex LI, chinese name is lijie'

 msg.swapcase 大小写互换


 >>> msg.zfill(40)
'00000my name is {name}, and age is {age}'



>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'


>>> b="ddefdsdff_哈哈" 
>>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
True

三、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
例如我们需要把全国人民的年龄、身高、性别等信息存下来(实际上使用列表的方式也可以进行存储操作,但是需要记住每一个值的下标信息,这样就太麻烦了),这里介绍一种更为简便实用的方法:
info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}

此时我们会发现,print打印之后显示是无序的,这是因为字典没有下标的原因导致的。由于字典是无序的,所以我们取值时通过key进行的,print(key名称)即可。由此发现:

   字典的特性:

(1)dict是无序的

(2)key必须是唯一的,so 天生去重。

 

那现在“查”是可以查询了,字典中可以进行修改操作吗?可以的,先来看下 对已存在信息进行修改的操作是怎样的:

如果对原字典不存在的信息进行修改可以修改成功吗?例如原字典中本没有stu1104这个key,现在我们操作将stu1104修改为“宫本武藏”,结果会是怎样的?

打印之后的结果显示,对于不存在的字典信息进行修改时,会自动新增该条不存在的信息。

 

打印出来的结果如下:

 

本节课课后作业:

购物车

         用户入口:

                         1.商品信息存在文件里

                         2.已购商品、余额记录(长时间留存)。

        商家入口:

                         1.可以添加商品,修改商品价格

 

posted @ 2017-07-19 09:44  hait1234  阅读(242)  评论(0编辑  收藏  举报