2022-4-21 python 总结+作业

2022-4-21 python 学生

1 元组

1)什么是元组(tuple)(元组的不可变的列表)

是容器型数据;将()作为容器的标志,里面有多个元素用逗号隔开:(元素1,元素2,元素3,…)

元组的特点:

1 元组不可变的(只支持查,不支持增删改)

2有序的(直接下标操作)

3:任何操作

空元组:t1 =()无意义

只有一个元素的元组(重点!)

t2=(100,) ,必须有

注 :在没有歧义的情况下,元组的()可以省略 - 直接将多个数据用逗号隔开,表示的是一个元组

t2=(100)
print(t2,type(t2))		#100 
t1=(100,)
print(t1,type(t1))		#(100,) 

支持查,切片,求和,求最大,sorted(对原列表没修改),count

应用:当要求数据不可变时(如星期)

集合

1)什么是集合(set)

1集合是容器;用{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3,…}

2集合是可变的;

3集合是无序的

4元素的要求:和字典对键的要求一样(不可变的数据;唯一的)

集合的空集合

s1=set()

s1={}		#空字典

s1=set()
print(type(s1),len(s1))		# 0

#集合元素是不可变数据
s2={10,'abc',(1,2)}			#正确
s3={10,'abc',[1,2]}			#报错 [1,2]可变数据
#集合元素是唯一的 -	去重
s3=[10,20,40,10,20,10]
print(set(s3))				#{40, 10, 20}

2)数学集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gs7aWMNZ-1650543595493)(C:\Users\86567\AppData\Roaming\Typora\typora-user-images\image-20220421111324579.png)]

s1={1,2,3,4,5,6,7}
s2={5,6,7,8,9,10}
print(s1&s2)				#{5, 6, 7}
print(s1|s2)				#{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(s1-s2)				#{1, 2, 3, 4}
print(s2-s1)				#{8, 9, 10}
print(s2^s1)				#{1, 2, 3, 4, 8, 9, 10}

比较运算

1 > 、<判断一个集合是不是另一个的真子集(真子集不包括本身)

2= 是否相等

字符串(重点)

1)什么是字符串

​ 1字符串是容器型数据类型

​ 2将’‘、“”、’‘’ ‘’'、“”" “”"作为容器的标志,引号中的每个符号就是字符串的元素

​ 3字符串是不可变的;(任何对字符串的修改操作都是重新产生一个字符串)

​ 4字符串是有序的,支持下标操作

​ 5元素:引号中的每个符号就是字符串的元素,字符串的元素又叫字符,任何可以写进引号内的都可以

​ 字符可以分为普通字符和转义字符两种!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBcYwcJJ-1650543595495)(C:\Users\86567\AppData\Roaming\Typora\typora-user-images\image-20220421114039284.png)]

注:三个单引号和三个双引号只有放在具体位置才是注释(变灰)(py文件开头,函数开头,类开头)

其他地方变绿的对程序几乎无影响

2)字符串引号问题

三个单引号或者三个双引号想要数据内换行直接换行就行,单引号或双引号必须用转义字符才能换行

多行字符串 - 三个引号开头的字符串,字符串内容可以直接按回车换行

str1='abc红色经理mn*...'
str2='abc'
str3="abc"
str4='''abc'''
str5="""abc"""

4)空字符串

str1=''		#引号内必须什么没有
str1=' '
print(str1)		#1 

3)字符-字符串的元素

1)普通字符 - 在字符串中表示符号本身的字符就是普通字符

2)转义字符 - 在特定的符号前面加\来表示特殊功能或特殊意义的符号

转义字符 表示意义
\t 水平制表符(相当于按一个tab键)
\n 换行
\’ 表示一个普通的单引号
\" 表示一个普通的双引号
\\ 表示一个普通的反斜杠
print('a8*开始')
print('\tabc\n123')		
#	abc
123
print('it\'s me')			#it's me
print("it's me")			#it's me
print('\\tabc\\n123')		#\tabc\n123

4)R 语法

字符串的最前面可以加r或R,让字符串中所有的转义字符功能消失,所有的符号都变成普通字符:r、R

str1='\tabc\n123\u4e00'
print(str1)
# 	abc
#123一
str1=R'\tabc\n123\u4e00'		#\tabc\n123\u4e00

5)字符编码

计算器在存储数据时只能存数字,而且存的是数字的补码

78 -> 01001110(源码) -> 00110001(反码) ->00110010(补码)

-78 -> 11001110(源码) -> 10110001(反码) ->10110010 (补码)

字符串存储时:

字符编码:为了能够让计算机保存文字符号,我们给每一个符号对应了一个固定数字,在存储符号的时候就保存这个符号对应的数字

1)ASCII码表:只保存了128个字符的编码(通过1个字节来对128个字符进行编码,里面的字符是美国通用的符号。数字在大写字母的前面、大写字母在小写字母前面、大写字母和小写字母之间有间隙(A-65;a-97)

2)unicode编码表(python用的编码表):又叫万国码、统一码(包含了世界上所有的国家所有民族的所有的语言的符号)

​ a. unicode码是ASCII码表的扩展,它包含ASCII码表

​ b.中文编码值范围:4e00(一)~9fa5

3)python使用编码表

​ 1 chr函数:chr(编码值) - 获取编码值对应的字符

​ 注意:如果想在程序中直接使用16进制数,数字前必须加前缀’0x’或’0X’

​ hex(十进制数) - 获取指定十进制对应的16进制

​ 2 ord函数:ord(字符) - 获取指定字符对应的编码值

​ 3 编码字符:在字符串中用’\u4位的16进制数’来表示一个字符

​ 应用:判断一个字符是不是汉字

print(chr(97))		#A
print(chr(65))		#a
print(hex(ord('张')),hex(ord('云')),hex(ord('川')))
str1='a\u0061一\u4e00'
print(str1)
#判断x是否为中文
x='9'
print('\u4e00'<=x<='\u9fa5')		#False
print('一'<=x<='龥')				   #False

1查 - 获取元素(字符)

列表获取元素的方法字符串都支持

1)取单个字符

字符串[下标]

注意:一个转义字符长度是1,一个空格的长度也是1

2)取多个字符

切片

字符串[开始下标:结束下标:步长]

3)遍历

for 变量 in range()

for 变量1,变量2 in enumerate()

str1='hello world!'
print(str1[1])		#'e'
print(str1[-1])
print(str1[1:])

2 相关操作

1)+、*

字符串1+字符串2 - 将两个字符串合并成一个字符串

字符串*N - 将N个字符串合并成一个字符串

str1='hello'
str2='python'
print(str1+str2)				#hellopython

2)比较大小:>、>=、<、<=

两个字符串比较大小比较的是第一对不相等的字符的编码值的大小

print('abc'<'1234567890')		#False
#练习1:已知一个字符串,统计字符串中数字字符的个数
#练习2:已知一个字符串,提取字符串中所有的中文字符
str1='abc1123你好110'
str2='ab啊c1123你好110是-2=2'

3)in和not in

字符串1 in 字符串2 - 判断字符串2中是否包含字符串1(判断字符1是否是字符串2的子串)

作业

  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入’abcd1234 ’ 输出’bd24’

    str1='abcd1234'
    for x,y in enumerate(str1):
        if x%2:
            print(y,end='')
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    str1=input('输入用户名')
    sum=0
    for x in str1:
        sum+=1
    if 6<=sum<=10:
        print('用户名合法')
    else:
        print('用户名不合法')
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    str1=input('输入用户名')
    for x in str1:
        if '0'<=x<='9' or 'a'<=x<'z' or 'A'<=x<='Z':
            continue
        else:
            print('用户名不合法')
            break
    else:
        print('用户名合法')
    
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

    str1=input('输入用户名')
    if 'A'<=str1[0]<='Z':
        for x in str1:
            if '0'<=x<='9' or 'a'<=x<'z' or 'A'<=x<='Z':
                continue
            else:
                print('用户名不合法')
                break
        else:
            print('用户名合法')
    else:
        print('输入用户不合法')
    
  5. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

    例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’

    str1='abc1shj23kls99+2kkk'
    str_new=''
    for x in str1:
        if '0'<=x<='9':
            str_new+=x
    print(str_new)
    
  6. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

    例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’

    str1='a2h2klm12+'
    str_new=''
    for x in str1:
        if 'a'<=x<='z':
            x=chr(ord(x)-32)
        str_new+=x
    
  7. 输入一个小于1000的数字,产生对应的学号

    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

    str1=input('输入小于1000的整数')
    str2='py1901000'
    result_1=str2[0:9-len(str1)]
    result=result_1+str1
    print(result)
    
  8. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3

    str1='anc2+93-sj胡说'
    count=0
    for x in str1:
        if 'a'<=x<='z' or 'A'<=x<='Z' or '0'<=x<='9':
            continue
        else:
            count+=1
    print(count)
    
  9. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+'**

    str='abc123'
    print('+'+str[1:-1]+'+')
    
  10. 输入字符串,获取字符串的中间字符

    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

    str1='abc1234'
    l=len(str1)
    if l%2:
        print(str1[l//2])
    else:
        print(str1[l//2-1]+str1[l//2])
    
  11. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

    例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

    str1='how are you? Im fine, Thank you!'
    str2='you'
    i=1
    for x in str1:
        str3=str1[0:i]
        if str2 in str3:
            print(i-len(str2))
            break
        else:
            i=i+1
    
  12. 获取两个字符串中公共的字符

    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

#方法1
str1='abc123'
str2='huak3'
s1=set(str1)
s2=set(str2)
print(s1&s2)
#方法2
str1='abc123'
str2='huak3'
s=''
for x in str1:
 if x in str2 and x not in s:
     s+=x
print(s)

    if str2 in str3:
        print(i-len(str2))
        break
    else:
        i=i+1
```
  1. 获取两个字符串中公共的字符

    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

#方法1
str1='abc123'
str2='huak3'
s1=set(str1)
s2=set(str2)
print(s1&s2)
#方法2
str1='abc123'
str2='huak3'
s=''
for x in str1:
 if x in str2 and x not in s:
     s+=x
print(s)

你可能感兴趣的:(python)