Python元组、字符串

1. 元组

  1. 什么是元组
    元组是容器型数据类型,将()作为容器的标志,里面多个元素用,隔开(数据1,数据2,数据3)。
    元组是不可变的(不支持增删改);有序的(支持下标操作)
    元素:没有要求
    空元组:
    t1=()
  2. 有一个元素的元组,唯一的元素后面必须加逗号
t2=(10,)
print(t2,type(t2),len(t2))
# (10,) <class 'tuple'> 1
  1. 没有歧义的情况下,元组的()可以省略。直接将多个数据用逗号隔开表示的也是一个元组。
t3 = 10, 20, 30
print(t3)
t31 = (10, 20, 30)*2
print(t31)
# (10, 20, 30)
  (10, 20, 30, 10, 20, 30)
  1. 解包 使用多个变量直接获取元组,列表中的多个元素
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)
  1. 元组是不可变的列表,要求元素不能修改就用元组。
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. 字符串

  1. 字符串是容器型数据类型(字符串对应的容器只能保存多个文字符合-字符),将’'或者" "作为容器的标志,里面每个符号都是字符串中的每个元素,
  2. 不可变的(不支持增删改),字符串有序支持下标操作,
  3. 元素:引号中每个符号都是字符串的元素字符串的元素又叫字符。
# 字符串不可变,所有可变操作都是在创建新的字符串
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. 字符

字符串中每一个独立的符号

  1. 转义字符,以\和另外一个或多个符号一起组合而成。
    \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
  1. r字符串
    如果表示字符串时在字符串最前面加r/R,可以让字符串中所有的转义字符功能消失。
str3=r'\tabc\n123'
print(str3)
# 
  1. 编码字符
    \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. 字符编码
    计算机存储数据只能存数字(计算机只具备存储数字的能力)
    为了能够让计算机保存文本信息,就给每一个文本符号对应一个固定的数字,每次在需要存储这个文本符号的,这个数字就叫这个符号的编码值。
  2. 编码表
    保存每个符号对应的编码值的表。
    1)ASCII码表
    总共有128个字符,主要包含:常用的英文符号、数字字符、字母。
    A-65 a-97 9-59
    2)Unicode编码表
    Unicode编码表中包括ASCII表
    万国码,包括世界上所有国家所有民族的所有语言的符号
    中午编码:4e00~9fa5
  3. 编码值的应用
    1)chr(编码值)。获取指定编码值对应的字符
print(chr(97))
print(chr(0x4e00))
print(chr(0x9fa5))
# a
  一
  龥
  1. 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. 基本操作

  1. 查 字符串获取元素和列表获取元素的语法一模一样.
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. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

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

    str1='abcd1234 '
    print(str1[1::2])
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

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

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

    str1=input('输入:')
    for i in str1:
        if '1'<=i<='9' or 'a'<=i<='z' or 'A'<=i<='Z' :
            print('合法')
        else:
            print('不合法')
    
  4. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

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

    str1='abc1shj23kls99+2kkk'
    str2=''
    for i in str1:
        if '1'<=i<='9':
            str2+=i
    print(str2)
    
  5. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用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) 
    
  6. 输入一个小于1000的数字,产生对应的学号

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

    str1 =23
    str2='py190'+ str(1000+str1)
    print(str2) 
    
  7. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘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)
    
  8. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

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

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

    例如: 输入**‘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])
    
  10. 获取字符串1中字符串2第一次出现的位置)

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

  11. 获取两个字符串中公共的字符

    例如: 字符串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)
    
  12. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值