Python基础之字符串

介绍

字符串是Python中最常用的数据类型之一,使用单引号或双引号来创建字符串,使用三引号创建多行字符串。

一、基础语法

1、获取字符串长度函数 len(s)

注意空字符串 s="“是连续两个引号,中间没有任何东西,空串的长度为 0,len(s)=0, 但是 s=” "包含一个空格,s 不是空串,长度为 1。

len("abc")        # 3
len("我们 abc")   # 6

2、字符与编码的转换

s="Hi,你好"
for i in range(len(s)):
    print(s[i],ord(s[i]))

# H 72
# i 105
# ,65292
# 你 20320
# 好 22909 
print(chr(97))   # a
print(chr(98))   # b

字符串是不可变数字类型

s="123"
s[1]="4"
print(s)
# TypeError: 'str' object does not support item assignment

3、字符串切片

切片参数: (左闭右开
• start 起始位置,默认索引从0开始
• stop 结束位置,默认最后一个元素
• step 步长,默认为1

s="abcdefghi"
print(s[0:-2])     # abcdefg
print(s[:-2])      # abcdefg
print(s[-2:])      # hi
print(s[:])        # abcdefghi
print(s[::-2])     # igeca
print(s[7:-1:-1])  # 没有交集
print(s[8:0:-1])   # ihgfedcb

4、字符串组成方式

4.1 "+"号直接拼接

print("a"+"b")   # ab

4.2 %s %d %f

%s:格式化字符串
%d:格式化整数
%f:格式化浮点数,可指定小数点后的精度

name="张三"
age=18
print("姓名:%s,年龄:%d"%(name,age))

4.3 str.format()

name = "张三"
age = 18
print("姓名{},年龄{}".format(name,18))     # 姓名张三,年龄18
print("姓名{1},年龄{0}".format(18,name))   # 姓名张三,年龄18

4.4 f""

name="张三"
age=18
print(f"{name}的年龄是{age}")   # 张三的年龄是18

5、字符串的常见操作

5.1 s.find()

返回该元素的最小索引

s='hello world'
print(s.find('o'))   # 4  当元素有多个时,返回最小索引
print(s.find('c'))   # -1 找不到则为-1

5.2 s.index()

返回该元素的最小索引

s='hello world'
print(s.index('o'))  # 4
print(s.index('c'))  # ValueError: substring not found

实际上,该方法与s.find()实现的功能一样,但是唯一不同的就是当元素不存在时,s.index()方法会报错。所以建议使用s.find()

5.3 s.split(sep=None)

以sep来分割字符串,并返回列表
sep默认为None,分割默认为空格

s="hello world"
print(s.split())     # ['hello', 'world']
s="hello world"
print(s.split('o'))  # ['hell', ' w', 'rld']

5.4 s.startswith()

判断字符串是否以前缀开始,返回bool值

s='hello world'
print(s.startswith('he'))  # True

5.5 s.endswith()

判断字符串是否以尾缀结束,返回bool值

s='hello world'
print(s.endswith('ld'))  # True

5.6 s.strip()

默认去掉字符串左右的空格

s='  hello world  '
print(s.strip())     #hello world

s.rstrip():去掉字符串右边的空格
s.lstrip():去掉字符串左边的空格

5.7 s.join()

将序列中的元素以指定的字符连接生成一个新的字符串

li = ["你好","世界"]
s = '~'.join(li)
print(s)           # 你好~世界

二、字符串基础案例练习

1、输入一个字符串,统计它包含的大写字母、小写字母、数字的个数

s=input('enter:')
upper=0
lower=0
digit=0
for i in range(len(s)):
    if s[i]>='A' and s[i]<='Z':
        upper += 1
    if s[i]>='a' and s[i]<='z':
        lower += 1
    if s[i]>='0' and s[i]<='9':
        digit += 1
print('upper:',upper)
print('lower:',lower)
print('digit',digit)

# enter:abvH88
# upper: 1
# lower: 3
# digit 2

2、输入一个字符串,将其反向显示

方法一:

def reverseA(s):
    t=''
    for i in range(len(s)-1,-1,-1):
        t=t+s[i]
    print('reverseA:',t)
s=input('enter:')
reverseA(s)

# enter:abcde
# reverseA:edcba

方法二:

def reverseB(s):
    t=''
    for i in range(len(s)):
        t=s[i]+t
    print('reverseB:',t)
s=input('enter:')
reverseB(s)

# enter:abcde
# reverseB: edcba

3、输入一个字符串,去掉它左右多余的空格

def demo(s):
    t=''
    i=0
    j=len(s)-1
    while i<=j and s[i]==' ':
        i += 1
    while i<=j and s[j]==' ':
        j -= 1
    for m in range(i,j+1):
        t += s[m]
    return t
s=input('enter:')
demo(s)
print('length1:',len(s))
print('length2:',len(demo(s)))

# enter:  abc 
# length1: 6
# length2: 3

4、输入一个字符串,将其中小写字母变大写、大写字母变小写

如果 C 是一个大写英文字母,那么 ord(C)是它的编码,ord(C)-ord(“A”)是它相对"A" 的偏移量,ord(“a”)是"a"的编码,显然 ord(“a”)+ord(C)-ord(“A”) 是 C 对应的 小写字母的编码

def myUpper(s):
    t=''
    for i in range(len(s)):
        if s[i]>='a' and s[i]<='z':
            t += chr(ord('A')+ord(s[i])-ord('a'))
        else:
            t += s[i]
    return t

def myLower(s):
    t=''
    for i in range(len(s)):
        if s[i]>='A' and s[i]<='Z':
            t += chr(ord('a')+ord(s[i])-ord('A'))
        else:
            t += s[i]
    return t

s=input('enter:')
print('upper:',myUpper(s))
print('lower:',myLower(s))

# enter:myABC
# upper: MYABC
# lower: myabc

5、判断一个字符串是否对称

方法一:
编写一个函数把字符串反向,与原来比较

def demo(s):
    t=''
    for i in range(len(s)-1,-1,-1):
        t += s[i]
    return t
s=input('enter:')
if s == demo(s):
    print('对称')
else:
    print('不对称')

# enter:abcba
# 对称

方法二:
用 i,j 表示左右的下标,逐步比较(s[0],s[len(s)-1]) , (s[1],s[len(s)-2]) ,…

def demo(s):
    i=0
    j=len(s)-1
    while i<j:
        if s[i] != s[j]:
            return 0
        j -= 1
        i += 1
    return 1
s=input('enter:')
if demo(s)==1:
    print('对称')
else:
    print('不对称')

# enter:abcba
# 对称
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值