Python入门之字符串

       

目录

一、从字符串中检索单个字符

练习-1 计算数字总和

二、检索部分字符串

练习-2 逆序显示字符串

三、设置字符串格式

1.使用%进行字符串格式化

2.使用format方法

3.f-string

四.字符串方法

1.center

2.find

3.join

4.lower

5.upper

6.title

7.swapcase

8.判断字符串是否为大写/小写

8.1 islower

8.2 isupper

9.replace

10.split  

11.strip

12.translate

13.判断字符串是否满足特定条件

练习-3 改变名字的顺序

练习-4 创建一个登录ID

练习-5 创建一个随即单词

练习反转数字


 Python支持许多字符串操作函数和方法,这里介绍最常用的。

一、从字符串中检索单个字符

        以文本“Hello World”为例,该字符串由11个字符组成,包括两个单词之间的空格字符(space),每个字符的位置如下图所示:

0 1 2 3 4 5 6 7 8 9 10
H e l l o W o r l d

        第一个字符串的位置是0,两个单词之间的空格也是一个字符(空格的 ASCII 值为 32)。

        Python允许使用所谓的子串表示法检索字符串的单个字符。可以使用索引0访问第一个字符,索引1访问第二个字符,以此类推。最后一个字符的索引值比字符串的长度小1。以下程序是一个例子:

a = "Hello World"

print(a[0])#It displays: H
print(a[6])#It displays: W
print(a[10])#It displays:d

        如果希望从字符串的末尾处开始计数,可以使用负向索引。例如:索引-1指的是最右边的字符。在文本"Hello World"中,每个字符位置的负向索引如下:

-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
H e l l o W o r l d

示例如下:

a = "Hello World"

print(a[-1])#It displays: d
print(a[-11])#It displays: H

        使用无效索引值Python会显示错误。

练习-1 计算数字总和

编写一个Python程序,提示用户输入一个3位数的整数,然后计算3位数字的和。


        主要思想:将给定的字符转化为字符串,然后将每个数位(亦被转化为字符)分解到单个变量中做运算。

n = int(input("Enter an three-digit integer:"))

digit1, digit2, digit3 = str(n)

total = int(digit1) + int(digit2) + int(digit3)
print(total)

二、检索部分字符串

        在Python中,如果想从字符串中提取一部分内容,可以使用如下的切片语法:

subject[beginIndex:endIndex:step]

        这个语法会返回 subject 字符串的一个子串。具体来说:

  • beginIndex:切片的起始位置,包含该位置的字符。如果省略此参数,默认从位置 0 开始。
  • endIndex:切片的结束位置,但不包括该位置的字符。如果省略此参数,切片会一直持续到字符串的末尾
  • step:切片的步长,默认是 1。这个参数用于控制字符的间隔。

        示例如下:

a = "Hello World"

print(a[7:9]) #It displays the letters o,and r

print(a[4:10:2]) #It displays the letters o, W, and r

print(a[7:]) #It displays the letters o, r, l and d

print(a[:3]) #It displays the letters H, e, and l

        如果希望从字符串的末尾开始计数,可使用下例所示的负数索引:

a = "Hello World"

print(a[3:-2]) #It displays "lo Wor"

print(a[-4:-2]) #It displays "or"

print(a[-3:]) #It displays "rld"
print(a[:-3]) #It displays "Hello Wo"

练习-2 逆序显示字符串

编写一个Python程序,提示用户输入任意一个具有4个字母的单词,然后逆序显示其内容。


这个问题可以有3种不同的解法:

        第1种方式:假设用户的输入内容被赋给变量s。使用索引一次访问第4、3、2、1个字母。

Python程序如下所示:

s = input("Enter a word with four letters: ")

s_rev = s[3] + s[2] +s[1] +s[0]

print(s_rev)

        第2种方式:将4个字母分解到4个变量中。Python程序如下所示:

s = input("Enter a word with four letters: ")

a, b, c, d = s
s_rev = d + c + b + a

print(s_rev)

        第3种方式:使用-1作为参数step的值。Python程序如下所示:

s = input("Enter a word with four letters: ")

s_rev = s[::-1]

print(s_rev)

三、设置字符串格式

        将变量的值转换为字符串并插入到文本中是非常常见且重要的操作,称之为 "字符串格式化"。

1.使用%进行字符串格式化

        这是python早期使用的字符串格式化方法,类似于c语言中的printf语法:在%左边指定一个字符串,并在右边指定要设置其格式的值。指定要设置格式的值时,可使用单个值(字符串或数字),可使用元组(如果要设置多个值的格式),还可以使用字典,其中元组最常见。

>>> format="Hello, %s. %s enough for ya?"
>>> values=("world","Hot")
>>> print(format % values)
Hello, world. Hot enough for ya?

这里的%s被称为转换说明符,表示要将值插入字符串中的位置,并以字符串形式显示。如果指定的值不是字符串,将使用str将其转换为字符串。例如:%.3f表示将值设置为包含3位小数的浮点数。

2.使用format方法

        format方法用花括号{ }占位,然后用.format()来填值:

>>> "{}, {} and {}".format('first','second','third')
'first, second and third'
>>> "{0},{1} and {2}".format('first','second','third')
'first,second and third'

还可以设置格式,比如保留几位小数:

>>> "{name} is approximately {value:.2f}.".format(value=pi,name="Π")
'Π is approximately 3.14.'

3.f-string

        从python3.6开始,引入了一种更简洁、更直观的方式来处理字符串格式化,这就是f-string。它的核心思想是:在字符串前加上一个f,然后在字符串中直接使用花括号{}来引用变量名:

>>> from math import e
>>> f"Euler's constant is roughly {e}."
"Euler's constant is roughly 2.718281828459045."
e=2.7182
print(f"Euler's constant is roughly {e}.")


name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")

四.字符串方法

1.center

        方法centet通过在两边添加填充字符(默认为空格)让字符串居中:

>>> "The Middle by Jimmy Eat World".center(39)
'     The Middle by Jimmy Eat World     '
>>> "The Middle by Jimmy Ear World.".center(39,'*')
'*****The Middle by Jimmy Ear World.****'

2.find

       find方法在字符串中查找子串,如果找到,就返回子串的第一个字符的索引,否则返回-1.

>>> 'with a moo-moo here,and a moo-moo there'.find('moo')
7
>>> title="Montly Python's Flying Circus"
>>> title.find('Montly')
0

find方法可以指定搜索的起点和终点:

>>> subject='$$$ Get rich now!!! $$$'
>>> subject.find('$$$')
0
>>> subject.find('$$$',1)#只指定起点
20
>>> subject.find('!!!')
16
>>>

!!请注意,搜索范围包含起点,不包含终点。

3.join

        join用于合并序列的元素,其作用与split相反,是一个很重要的字符串方法:

>>> seq=[1,2,3,4,5]
>>> sep='+'
>>> sep.join(seq)#尝试合并一个字符串列表
Traceback (most recent call last):
  File "", line 1, in 
TypeError: sequence item 0: expected str instance, int found
>>> seq=['1','2','3','4','5']
>>> sep.join(seq)#合并一个字符串列表
'1+2+3+4+5'
>>> dirs='','usr','bin','env'
>>> '/'.join(dirs)
'/usr/bin/env'
>>> print('C:'+'\\'.join(dirs))
C:\usr\bin\env

    上述例子告诉我们,join方法适用于任何可迭代的对象,如列表、元组等,但是所合并的序列必须是字符串。如果尝试连接非字符串类型的元素,会抛出typeerror

a = "Hello Olympians!"
print(len(a))#It displays:16

b = "I am newbie in Python"
k = len(b)
print(k)#It displays:21

4.lower

        lower方法返回字符串的小写版本。例如,检查列表中是否包含指定的用户名而忽略大小写的差别,就可以使用这个方法。

>>> 'Today is Sunny'.lower()
'today is sunny'

5.upper

        upper方法将字符串中的所有小写字母转换为大写字母:

>>> 'Today is Sunny'.upper()
'TODAY IS SUNNY'

6.title

        title方法将字符串中每个单词的首字母转换成大写,其余字母小写:

>>> 'TODAY IS SUNNY'.title()
'Today Is Sunny'

7.swapcase

        swapcase方法将字符串中大写字母转换成小写,小写字母转换成大写:

>>> 'Today Is Sunny'.swapcase()
'tODAY iS sUNNY'

8.判断字符串是否为大写/小写

8.1 islower

        islower方法检查字符串中所有字母是否均为小写,并返回一个布尔值:

s = "hello world"
print(s.islower())  # 输出: True

s = "Hello World"
print(s.islower())  # 输出: False

8.2 isupper

        isupper方法检查字符串中的所有字母是否都是大写,并返回一个布尔值:

s = "HELLO WORLD"
print(s.isupper())  # 输出: True

s = "Hello World"
print(s.isupper())  # 输出: False

9.replace

        replace方法将指定子串替换为另一个字符串,并返回替换后结果:

>>> 'This is a test.'.replace('is','eez')
'Theez eez a test.'

10.split  

        split非常常见且重要,用于将字符串拆分成序列,与join作用相反:

>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']

如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)处进行拆分。

11.strip

        strip方法将字符串开头和末尾的空白(但不包括中间的空白)删除并返回删除后的结果:

>>> '   internal whitespace is kepr     '.strip()
'internal whitespace is kepr'

假定用户输入用户名时不小心在末尾加了一个空格,strip就很有用:

>>> names=['gumby','smith','jones']
>>> name='gumby '
>>> if name in names:print('Found it!')
...
>>> if name.strip() in names:print('Found it!')
...
Found it!

strip方法还可以在字符串中指定要删除哪些字符(还是只能删除开头和结尾的指定字符,不包括中间的):

>>> '*** SPAM * for *everyone!!!***'.strip('*!')
' SPAM * for *everyone'

12.translate

        translate方法与replace一样替换字符串的特定部分,但只能进行字符替换。这个方法能够同时替换多个字符,因此效率比replace高。

        使用translate之前必须创立一个转换表。这个转换表指出了不同Unicode码之间的转换关系。要创建转换表,可对字符串类型str调用maketrans方法。maketrans是一个辅助函数,它的基本用法如下:

table=str.maketrans(x,y,z)

这个方法接受3个参数:x和y是2个长度相同的字符串,它们指定要将x字符串中的每一个字符都替换为y字符串中的相应字符,z是可选字符串,表示需要删除的字符。

        创建转换表后,可以将其作为参数传给translate方法,对字符串进行替换或删除操作:

new_string=original_string.translate(table)

示例1:将英文文本转换为带有德国口音的版本

        假设我们要将一段英文文本转换为带有德国口音的版本,为此需要将字符c 替换为k,将字符s 替换为z。

#1.创建转换表
table = str.maketrans('cs','kz')

#2.使用translate进行替换
original_text = "this is an incredible test"
translated_text = original_text.translate(table)
print(translated_text)#输出 thiz iz an inkredible tezt

示例2:将所有空格删除(模仿语速极快的德国口音)

#1.创建转换表
table = str.maketrans('cs','kz',' ')

#2.使用translate进行替换
original_text = "this is an incredible test"
translated_text = original_text.translate(table)
print(translated_text)#输出 thizizaninkredibletezt

13.判断字符串是否满足特定条件

        很多字符串方法以is打头,如isspace、isdigit和isupper,它们分别判断字符串是否全为空白、数字或大写,类似的还有isalnum、isalpha、isdecimal、isidentifier、islower、isnumeric、isprintable、istitle等。

练习-3 改变名字的顺序

        编写一个Python程序,提示用户输入一个由名和姓构成的字符串。最后,程序改变名和姓的顺序。


解答:

        这个练习的思路是拆分字符串并将名和姓赋给不同的变量。以Tom Smith为例,需要拆分的字符串和各字符的位置如下:

0 1 2 3 4 5 6 7 8
T o m S m i t h

        区分名和姓的方法在于它们之间的空格,问题是空格字符位置在不同名字里的位置不同。因此需要find()方法查找并返回空格字符的位置,该位置也是名字第一个单词的字符数量

        该问题的Python程序实现如下:

full_name = input("Enter your full name: ")

#Find the poisition of space character.This is also the number of characters first name contains
space_pos = full_name.find(" ")

#Get space_pos number of characters staring from position 0
name1 = full_name[:space_pos]

#Get the rest of the characters starting from position space_pos + 1
name2 = full_name[space_pos + 1:]

full_name = name2 + " " + name1
print(full_name)

练习-4 创建一个登录ID

        编写一个Python程序,提示用户输入姓氏,然后取姓氏的前4个字母(小写)和一个随即的3位整数创建一个登录ID。


解答:

        要创建一个随机整数可以用randrange()函数。由于需要3位随机整数。因此数字范围必须介于100~999。

        该问题的Python程序实现如下:

import random
last_name = input("Enter last name: ")

#Get random integer between 100 and 999
random_num = random.randrange(100,1000)

print(last_name[:4].lower()+str(random_num))

练习-5 创建一个随即单词

        编写一个Python程序,输出一个由3个字母组成的随即单词。


解答:

        创建随即单词需要用到常量ascii_lowercase,它包含所有英语字母。因此首先导入string模块,然后使用randrange()方法在0和25之间随机选择字母。

        该问题的Python程序实现如下:

import string
import random

alphabet = string.ascii_lowercase

random_word = alphabet[random.randrange(26)]+\
            alphabet[random.randrange(26)]+\
            alphabet[random.randrange(26)]

print(random_word)

此处的26也可以用len(ascii_lowercase)代替。

练习反转数字

         编写一个Python程序,提示用户输入一个整数,然后将其反转。例如,如果用户输入数字375,程序输出数字375。


解答:

        本题有多种解法,例如用取商(//)和取余(%)运算符的方法。本章学习的字符串操作也可以完成这个问题。方法是,将给定的整数转化为字符串,然后反转字符串,并将其转换为整数。

        本题解法如下:

number = int(input("Enter an integer: "))

#Convert the number to string
number_string = str(number)

#Reverse the strnig
reversed_string = number_string[::-1]

#Convert the revered string to integer:
reversed_number = int(reversed_string)

print(reversed_number)

也可以采用更简洁的代码:

number = int(input("Enter an integer: "))

reversed_number = int(str(number)[::-1])

print(reversed_number)

你可能感兴趣的:(python,开发语言)