1. 元组
- 什么是元组
元组是容器型数据类型,将()作为容器的标志,里面多个元素用,隔开(数据1,数据2,数据3)。
元组是不可变的(不支持增删改);有序的(支持下标操作)
元素:没有要求
空元组:
t1=() - 有一个元素的元组,唯一的元素后面必须加逗号
t2=(10,)
print(t2,type(t2),len(t2))
# (10,) <class 'tuple'> 1
- 没有歧义的情况下,元组的()可以省略。直接将多个数据用逗号隔开表示的也是一个元组。
t3 = 10, 20, 30
print(t3)
t31 = (10, 20, 30)*2
print(t31)
# (10, 20, 30)
(10, 20, 30, 10, 20, 30)
- 解包 使用多个变量直接获取元组,列表中的多个元素
t4 = (10, 20, 30)
print(t4[0], t4[2])
# 提供多个变量来获取
x, y, z = t4
print(x, y, z)
# 10 30
10 20 30
list1 = [100, 200, 300]
for index, item in enumerate(list1):
print(index, item)
# [(0, 100), (1, 200), (2, 300)]
# x,y = (0, 100); x,y=(1, 200); x,y=(2, 300)
for x, y in enumerate(list1):
print(x, y)
d1 = {'a': 10, 'b': 20, 'c': 30}
for key, item in d1.items():
print(key, item)
- 元组是不可变的列表,要求元素不能修改就用元组。
t5 = (10, 20, 30)
print(t5[-1])
print(t5[1:])
print(t5 * 2, t5 + (1, 100))
print(10 in t5)
print((10, 20) > (1, 1000))
# 30
(20, 30)
(10, 20, 30, 10, 20, 30) (10, 20, 30, 1, 100)
True
True
2. 字符串
- 字符串是容器型数据类型(字符串对应的容器只能保存多个文字符合-字符),将’'或者" "作为容器的标志,里面每个符号都是字符串中的每个元素,
- 不可变的(不支持增删改),字符串有序支持下标操作,
- 元素:引号中每个符号都是字符串的元素字符串的元素又叫字符。
# 字符串不可变,所有可变操作都是在创建新的字符串
str='efv'
new_str=str.upper()
print(new_str)
# EFV
# 字符串有序
print('ab'=='ba')
# False
``
```python
# 任何文字符号都可以是字符串的元素
str2='sdf2,./-+=&函数'
print(str2)
# \t是转义字符 tap
str3='sd\t2,./-+=&函数'
print(str3)
# sd 2,./-+=&函数
3. 字符
字符串中每一个独立的符号
- 转义字符,以\和另外一个或多个符号一起组合而成。
\n 换行
str3='s\n1234567'
print(str3)
# s
1234567
\t 水平指表符(相当于按tab键)
str3='\tabc\n1234567'
print(str3)
# abc
1234567
’ 表示一个普通的单引号
str3='It\'s me !'
print(str3)
# It's me !
‘’ 表示一个普通的单引号
str3='abc\\n123'
print(str3)
# abc\n123
- r字符串
如果表示字符串时在字符串最前面加r/R,可以让字符串中所有的转义字符功能消失。
str3=r'\tabc\n123'
print(str3)
#
- 编码字符
\u四位的十六进制数
str3='\u4e00abc'
print(str3)
# 一abc
16进制:由0-9和a-f组成的
0x89
2进制:由0和1组成
0b1001
10进制:由0-9组成的数字
100
8进制:由0-7组成
0o77
4. 编码
- 字符编码
计算机存储数据只能存数字(计算机只具备存储数字的能力)
为了能够让计算机保存文本信息,就给每一个文本符号对应一个固定的数字,每次在需要存储这个文本符号的,这个数字就叫这个符号的编码值。 - 编码表
保存每个符号对应的编码值的表。
1)ASCII码表
总共有128个字符,主要包含:常用的英文符号、数字字符、字母。
A-65 a-97 9-59
2)Unicode编码表
Unicode编码表中包括ASCII表
万国码,包括世界上所有国家所有民族的所有语言的符号
中午编码:4e00~9fa5 - 编码值的应用
1)chr(编码值)。获取指定编码值对应的字符
print(chr(97))
print(chr(0x4e00))
print(chr(0x9fa5))
# a
一
龥
- ord(字符) 获取指定字符对应的编码值,字符指的是长度为1 的字符串
print(ord('a'),ord('A'))
# 97 65
案例:将小写字母转换为大写字母
c1='a'
# ord(c1)=97,chr(97-32)=A
print(chr(ord(c1)-32))
# A
3)编码字符
在字符串中表示字符的方式有两种:直接提供字符,也可以提供一个编码字符。
\u4位的16进制编码值
str1='a一'
str2='\u0061\u4e00'
print(str1,str2)
# a一 a一
判断c2保存的字符是否是中文
c2='伊'
if '一' <=c2 <= '\u9fa5':
# if '\u4e00' <=c2 <= '\u9fa5':
print('是')
else:
print('不是')
判断c3保存的字符是否是中大写字母
c3='a'
if 'A'<=c2<='Z':
print('是')
else:
print('不是')
两个字符串比较大小比较的是第一对不相等的字符的编码值
print('acv'>'Mffjes')
# True
print('acv'>'一Mffjes')
# FAlse
4. 基本操作
- 查 字符串获取元素和列表获取元素的语法一模一样.
message='hello python!'
print(message[0],message[-1])
# h !
切片
message='hello python!'
print(message[1:-1:2])
# el yhn
for x in message:
print(x)
print('+++++++')
for index in range(len(message)):
print(index, message[index])
print('--------')
for index, item in enumerate(message):
print(index, item)
字符串1+字符串2 将两个字符串合并,字符串 * N 字符串重复N次产生一个新的字符串
3. in 和 not in 判断字符串2是否包含字符串1
str='hello'
print('i'in str)
# False
案例:统计str1中中文的个数
count=0
str='逗哈哈号hudiefh334-='
for i in str:
if '\u4e00' <=i <= '\u9fa5':
count+=1
print(count)
# 4
案例:提取字符串中所有的大写字母(提取先弄空的,如果符合就往里加)
sum=''
str2 = '涉及到MJk230023sjkU293shT=='
for i in str2:
if 'A'<=i<='Z':
sum+=i
print(sum)
# 'MJUT'
练习题
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234 ’ 输出’bd24’
str1='abcd1234 ' print(str1[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
str1=input('输入:') if 6<=len(str1)<=10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
str1=input('输入:') for i in str1: if '1'<=i<='9' or 'a'<=i<='z' or 'A'<=i<='Z' : print('合法') else: print('不合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’
str1='abc1shj23kls99+2kkk' str2='' for i in str1: if '1'<=i<='9': str2+=i print(str2)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
str1 = 'a2h2klm12+' str2 = str1.upper() print(str2) str1 = 'a2h2klm12+' str2='' for i in str1: if 'a'<=i<='z': str2+=chr(ord(i)-32) else: str2+=i print(str2)
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
str1 =23 str2='py190'+ str(1000+str1) print(str2)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3
count = 0 str1 = 'anc2+93-sj胡说' for i in str1: if '1' <= i <= '9' or 'a' <= i <= 'z' or 'A' <= i <= 'Z': continue else: count += 1 print(count)
-
输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+'**
str1 = 'abc123' print('+'+ str1[1:-1]+ '+')
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1='abc123' if len(str1)%2!=0: print(str1[len(str1)//2]) else: print(str1[len(str1)//2],str1[len(str1)//2-1])
-
获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
-
获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1='abc123' str2='huak3' str3='' for i in str1: for j in str2: if i==j: str3+=i print(str3)
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法