Python小甲鱼学习笔记11-15

11列表2

一、从列表中获取元素

>>> member = ['筛子','披萨']
>>> member[0]
'筛子'
>>> member[1] 
'披萨'
>>> member[0],member[1] = member[1],member[0]
>>> member[0]
'披萨'
>>> member[1] 
'筛子'

二、从列表删除元素

1.   list1.remove(删除的元素的名字)
>>> member = ['筛子','披萨','左手','阿水','预言家','球皇']
>>> member.remove('阿水')
>>> member
'筛子','披萨','左手','预言家','球皇'

2.   del  + 列表 或者 列表中的元素
>>> member = ['筛子','披萨','左手','阿水','预言家','球皇']
>>> del member[3]
>>> member
'筛子','披萨','左手','预言家','球皇'
>>> del member #列表被删除

3.   list1.pop()  从列表中取出最后一个元素并返回给你 或者 加位置参数取出指定元素
>>> member = ['筛子','披萨','左手','阿水','预言家','球皇']
>>> member.pop()
'球皇'
>>> member
['筛子','披萨','左手','阿水','预言家']
>>> name = member.pop()
>>>> name
'预言家'
>>> member
['筛子','披萨','左手','阿水']
>>> name2 = member.pop(1)
>>> name2
'披萨'
>>> member
['筛子','左手','阿水']

三、列表分片

>>> member = ['筛子','披萨','左手','阿水','预言家','球皇']
>>> member[1:3]
['披萨','左手']
>>> member[:3]
['筛子','披萨','左手']
>>> member[3:]
['阿水','预言家','球皇']
>>> member[:]
['筛子','披萨','左手','阿水','预言家','球皇']
>>> member2 = member[:]
>>> member2
['筛子','披萨','左手','阿水','预言家','球皇']

四、课后题
1.请问 list1[0] 和 list1[0:1] 一样吗?
  不一样,list1[0]返回第0个元素的值,list1[0:1]返回一个只含有第0个元素的列表。
  
2.如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
  list1.insert(0,list1.pop())
  
3、有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
  Python 的列表很聪明,竟然支持负数索引,如图:
正序:   0 1 2 3 4 5
列表元素: 1 3 2 9 7 8
负序 :  -6 -5 -4 -3 -2 -1
正常索引从左到右索引,负数索引是从右到左

4、在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
list1[0:6:2]
  [1,2,7]
1)简洁分片操作:
list1[::2]
  [1,2,7]
2)步长不能为0,会报错
list1 = [1, 3, 2, 9, 7, 8]
list1 = [ : : 0 ]
  SyntaxError: invalid syntax
3) 步长可以是负数,改变方向(从尾部开始向左走)
list1[::-2]
  [8, 9, 3]

5.课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?
不能。

 list1 = [1, 3, 2, 9, 7, 8]
 list2 = list1[:]
 list2 
[1, 3, 2, 9, 7, 8]
 list3 = list1
 list3
[1, 3, 2, 9, 7, 8]
 list1.sort()
 list1
[1, 2, 3, 7, 8, 9] 
 list2
[1, 3, 2, 9, 7, 8]
 list3
[1, 2, 3, 7, 8, 9] 

在这里插入图片描述

PS:改变列表的赋值不会一起改变,而函数操作会一起改变
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
[1,2,3,4,5]
>>> print(old)
[6]

12列表3

一、运算符
在这里插入图片描述

1.单独一个元素可比较
>>> list1 = [123]
>>> list2 = [234]
>>> list1 > list2
False
2.多个元素按第一个比较
>>> list1 = [123,456]
>>> list2 = [234,123]
>>> list1 > list2
False
3.比较运算符与逻辑运算符
>>> list3 = [123,456]
>>> list1 < list2 and list1 == list3
True
4.连接操作符
>>> list4 = list1 + list2
>>> list4
[123,456,234,123]
5.重复操作符
>>> list3 = [123,456]
>>> list3 *3
[123,456,123,456,123,456]
>>> list3
[123,456]
>>> list3 *= 3
>>> list3
[123,456,123,456,123,456]
6.成员关系操作符
>>> 123 in list3
True
>>> 123 not in list3
False
>>> list5 = [123,'TES',['阿水','左手'],456]
>>> '阿水' in list5
False
>>> '阿水' in list5[2]
True
>>> list5[2][1]
'左手'
请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?
>>> list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
>>> list1[1][2][0] = '小鱿鱼'

二、列表内置函数

1.  list1.count(列表中的元素)  计算元素个数
>>> list1 = [123,456,123,456,123,456]
>>> list1.count(1233

2.  list1.index(列表中的元素[,范围起始,范围结束])  计算元素第一次出现的位置
>>> list1.index(123)
0
>>> list1.index(123,1,3)
2

3.  list1.reverse()  原地翻转,改变列表
>>> list1.reverse()
>>> list1
[456, 123, 456, 123, 456, 123]

4.  list2.sort()   正序排序
>>> list2 = [1,2,3,5,6,7,9,4,8]
>>> list2.sort()
>>> list2
[1,2,3,4,5,6,7,8,9]

5. 倒序 两种放法
>>> list2.sort(reverse = True) #倒序
>>> list2
[9,8,7,6,5,4,3,2,1]
>>> list2.sort()
>>> list2.reverse()

6. list2.copy() 复制
>>> list3 = list2.copy()
>>> list3
[9,8,7,6,5,4,3,2,1]

7.  list2,clear()  清除
>>> list2.clear()
>>> list2
[]

三、列表推导式或列表解析

1.  >>> [ i*i for i in range(10) ]
#你觉得会打印什么内容?
1.  >>> [i*i for i in range(10)]
2.  [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

#例如
1.  >>> list1 = [x**2 for x in range(10)]
2.  >>> list1
3.  [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#相当于
1.  list1 = []
2.  for x in range(10):
3.      list1.append(x**2)
 
#例如
0.  >>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
#相当于 
1.  list1 = []  
2.  for x in ragne(10):  
3.      for y in range(10):  
4.          if x%2 == 0:  
5.              if y%2 != 0:  
6.                  list1.append((x, y))  

四、例题
在这里插入图片描述

list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼c工作室','1.耐克']
#题目答案:
list3 = [name + ‘:’ + slogan[2:] for slogan in list1 for name in list2 if slogan[0] = = name[0]]
#相同作用:
list3 = []
for slogan in list1:
    for name in list2:
        if slogan[0] = = name[0]:
            list3.append((name + ':'+ slogan[2:]))#为了分割出1.2.3.4.
for each in list3:
    print(each)

13元组

在这里插入图片描述
一、创建和访问一个元组,元组的元素是不能修改的

>>> tuple1 = (1,2,3,4,5,6)
>>> tuple1[1]
2
>>> tuple1[3:5]
(4,5)
>>> tuple2 = tuple1[:]  #复制

在这里插入图片描述
二、更新和删除
更新、删除时采用拼接的方式改变元组

tuple1 = ('筛子','披萨','阿水','预言家','球皇')
tuple1 = tuple1[:2] + ('左手',) + tuple1[2:]
tuple1
('筛子','披萨','左手','阿水','预言家','球皇')

三、操作符与列表相同

四、课后题
0、请用一句话描述什么是列表?再用一句话描述什么是元组?
  列表:一个大仓库,你可以随时往里边添加和删除任何东西。
  元组:封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)。
  
1、元组的内置函数,仅有两个方法count() and index()可以使用,其他方法都不行。

2、 x, y, z = 1, 2, 3
请问x, y, z是元组吗?
所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:

>>> x, y, z = 1, 2, 3
>>> type(x)
<class 'int'>  
>>> h = x, y, z
>>> type(h)
<class 'tuple'>

3、上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?
   Python3 没有“元组推导式”,为嘛?没必要丫,有了“列表推导式”已经足够了。
  那为什么“>>> tuple1 = (x**2 for x in range(10))”不会报错?
因为你误打误撞得到了一个生成器:

1.  >>> type(tuple1)
2.  <class 'generator'>
#注意,Python3 开始 next() 方法改为 __next__() 哦~
1.  >>> tuple1.__next__()
2.    0
3.  >>> tuple1.__next__()
4.    1
5.  >>> tuple1.__next__()
6.    4
7.  >>> tuple1.__next__()
8.    9
9.  >>> tuple1.__next__()
10.   16
11. >>> tuple1.__next__()
12.   25
13. >>> tuple1.__next__()
14.   36

14字符串:内置方法

一、字符串切片
字符串定义之后,与元组类似,不能轻易修改。
例: 在这里插入图片描述
二、各类方法
详细见网址:
https://fishc.com.cn/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例如:   本身字符串没改变,返回新的字符串
>>> str1 = 'xiaoxie'
>>> str1.capitalize()
'Xiaoxie'
>>> str1
'xiaoxie'

三、课后题
在这里插入图片描述
程序演示:

1.  symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
2.  chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
3.  nums = '0123456789'
4.   
5.  passwd = input('请输入需要检查的密码组合:')
6.   
7.  # 判断长度
8.  length = len(passwd)
9.   
10. while (passwd.isspace() or length == 0) :
11.     passwd = input("您输入的密码为空(或空格),请重新输入:")
12.  
13. if length <= 8:
14.     flag_len = 1
15. elif 8 < length < 16:
16.     flag_len = 2
17. else:
18.     flag_len = 3
19.  
20. flag_con = 0
21.  
22. # 判断是否包含特殊字符
23. for each in passwd:
24.     if each in symbols:
25.         flag_con += 1
26.         break
27.     
28. # 判断是否包含字母
29. for each in passwd:
30.     if each in chars:
31.         flag_con += 1
32.         break
33.  
34. # 判断是否包含数字
35. for each in passwd:
36.     if each in nums:
37.         flag_con += 1
38.         break    
39.  
40. # 打印结果
41. while 1 :
42.     print("您的密码安全级别评定为:", end='')
43.     if flag_len == 1 or flag_con == 1 :
44.         print("低")
45.     elif flag_len == 2 or flag_con == 2 :
46.         print("中")
47.     else :
48.         print("高")
49.         print("请继续保持")
50.         break
51.  
52.     print("请按以下方式提升您的密码安全级别:\n\
53.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
54.     \t2. 密码只能由字母开头\n\
55.     \t3. 密码长度不能低于16位'")
56.     break

自己的代码:

print('----------14作业0密码安全性检查代码----------')
password = input('请输入您的密码:')
length =  len(password)
string = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
flag = 0
alphabet = 0

if  password.isalnum() and length <= 8:
    #字符串至少有一个字符并且所有字符都是数字或字母的返回True
    print('您的密码满足低级密码要求!')
else :
    for i in password :
        if i in string :
            flag += 1
            break
    for i in password :
        if i in chars :
            flag += 1
            break
    for i in password :
        if i in nums :
            flag += 1
            break
    for i in chars :
        if password[0] == i :
            alphabet = 1
            break
    if flag == 2 and length >= 8 :
        print('您的密码满足中级密码要求!')
    elif flag == 3 and length >= 16 and alphabet == 1 :
        print('您的密码满足高级密码要求!')
    else :
        print('您的密码不满足密码的设计要求,请按照下方规定重新设计密码!')
        print('低级密码要求:密码由单纯的数字或字母组成;密码长度小于等于8位')
        print('中级密码要求:密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\);任意两种组合密码长度不能低于8位')
        print('高级密码要求:密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合;密码只能由字母开头;密码长度不能低于16位')

15字符串格式化

一、 str1.format()
在这里插入图片描述
二、字符串格式化符号含义及转义字符含义
详情见网址:
https://fishc.com.cn/forum.php?mod=viewthread&tid=92997&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
例子:
在这里插入图片描述
在这里插入图片描述
三、课后题
0、编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):
程序演示:

q = True
while q:
    num = input('请输入一个整数(输入Q结束程序):')
    if num != 'Q':
        num = int(num)
        print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
        print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
        print('十进制 -> 二进制 : %d -> ' % num, bin(num))
    else:
        q = False
 bin() #返回一个整数 int 或者长整数 long int 的二进制表示。

自己的代码:

print('----------15作业0进制转换----------')
temp1 = input('请输入您要转换的进制:(二进制写2;八进制写8;十六进制写16)')
while True :
    while not temp1.isdigit() :
        temp1 = input('请输入正确的进制:')
    Hex = int(temp1)
    if Hex != 2 and Hex != 8 and Hex != 16 :
        temp1 = input('请输入正确的进制:')
        continue  #每次输入进制都必须为数字
    break

temp2 = input('请输入您要转换的数:')
while not temp2.isdigit() :
    temp2 = input('请输入正确的数字:')
num = int(temp2)

if Hex == 2 :
    print('转换后的二进制数为:',bin(num))
elif Hex == 8 :
    print('转换后的八进制数为:{0}'.format('%#o' % num))
else :
    print('转换后的十六进制数为:{0}'.format('%#x' % num))

print('进制转换结束!')
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值