1、字符串的创建
字符串是 Python 中最常用的数据类型,创建字符串只要给变量指定一个字符类型的值即可。可以使用以下方法:
使用单引号定义字符串
a = 'sun'
使用双引号定义字符串
b = "cloud"
使用""" 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
c= """
... 天气好热
... 没有风
... 也没有云
... """
示例:
>>> a = 'sun' # 定义a
>>> b = "cloud" #定义b
>>> c= """ # 定义c
... 天气好热
... 没有风
... 也没有云
... """
>>> print(a) #输出a
sun
>>> print(b) #输出b
cloud
>>> print(c) #输出c
天气好热
没有风
也没有云
>>>
2、字符串的特性
1 索引
- 字符串是字符的有序集合,可以通过其位置来获得具体的元素。在 python 中,字符串中的字符是通过索引来提取的,索引从 0 开始。
- python 可以取负值,表示从末尾提取,最后一个为 -1,倒数第二个为 -2,即程序认为可以从结束处反向计数。
索引是从0开始,使用:变量名称[索引] 来得到字符串中的字符
>>> name = 'shang' # 定义字符串,共有5个字符,其索引为0 1 2 3 4
>>> print(name[0]) # 输出第一个字符
s
>>> print(name[2]) # 输出第三个字符
a
>>> print(name[-1]) # 输出第最以后一个字符
g
>>> print(name[5]) # 该字符串中没有索引 5 出现报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>
2 切片
切片可以提取相应部分数据,通常右边界不包括在提取字符串内。
格式: 变量名称[start:stop:step] 从start开始到stop结束,步长为stop
print(name[0:3])
#输出提取的从索引0 到索引2 的所有字符(不包括右边界3)
print(name[0:4:2])
#输出提取的从索引0 到索引3 的所有字符,步长为2
print(name[:])
# 左右边界都为空,默认提取所有的字符
print(name[2:])
# 右边界为空,表示提取从索引2到结束的字符
print(name[:3])
# 左边界为空,表示提取从头开始到索引2 为止的字符
print(name[::-1])
# 字符串反转
输出结果示例:
>>> name = 'shang'
>>> print(name[0:3])
sha
>>> print(name[0:4:2])
sa
>>> print(name[:])
shang
>>> print(name[2:])
ang
>>> print(name[:3])
sha
>>> print(name[::-1])
gnahs
>>>
3 重复
格式 : 变量 * 重复次数
>>> name = 'shang' #定义变量
>>> name * 10 # 重复10次
'shangshangshangshangshangshangshangshangshangshang' # 结果显示
>>>
4 连接
格式 : 变量1 + 变量2
>>> name = ' shang ' # 定义变量
>>> addr = ' shanxi ' # 定义变量
>>> name + addr # 变量连接
' shang shanxi ' # 显示结果
>>>
5 成员操作符
in : 是成员为真
not in : 不是成员为真
可以判断指定字符是不是包含在字符串中(是否为组成字符串的成员),输出值为真true和假false
>>> name = ' shang ' # 定义变量
>>> 'sh' in name # 判断字符sh 包含在变量中
True # 输出结果True
>>> 'haha' in name # 判断字符haha 包含在变量中
False # 输出结果False
>>> 'sh' not in name # 判断字符sh 不包含在变量中
False #输出结果False
>>> 'haha' not in name #判断字符haha 不包含在变量中
True # 输出结果True
>>>
6 for遍历字符串的每一个字符
使用for 语句可以循环输出字符串中的每一个字符
[kiosk@foundation47 0523]$ cat name.py
name = 'shang' # 定义变量
for i in name :
print (i)
[kiosk@foundation47 0523]$ python3 name.py # 运行输出每一字字符
s
h
a
n
g
练习 :
题目要求:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)
读都是一样的整数。
1 字符串特性:
[kiosk@foundation47 day 02]$ cat 2.5.py
str = input('please input : ')
print( str[::-1] == str )
**测试:**
[kiosk@foundation47 day 02]$ python3 2.5.py
please input : 12345
False
[kiosk@foundation47 day 02]$ python3 2.5.py
please input : 1234321
True
[kiosk@foundation47 day 02]$
2 其他方法:
shell 脚本实现:
#!/bin/bash
read -p '请输入数字 : ' NUM
num=$NUM
MUN=0
while [ "$num" -gt "0" ]
do
((MUN=$MUN*10+$num%10))
((num=$num/10))
done
if
[ "$MUN" -eq "$NUM" ]
then
echo "$NUM 是回文数 !!"
else
echo "$NUM 不是回文数 !!"
fi
结果演示:
[root@foundation47 shell]# sh huiwenshu.sh
请输入数字 : 123
123 不是回文数 !!
[root@foundation47 shell]# sh huiwenshu.sh
请输入数字 : 1234321
1234321 是回文数 !!
7 字符串的常用方法
使用格式 : 字符串.函数名称
istitle() #判断字符串是否为标题(标题首字母大写) 输出为True 或者False
isupper() #判断字符串是否为全部大写 输出为True 或者False
islower() #判断字符串是否为全部小写 输出为True 或者False
lower() #将字符串转化成小写
upper() #将字符串转化成大写
title() # 将字符串转化成标题格式
示例:
>>> 'shang'.istitle()
False
>>> 'Shang'.istitle()
True
>>> 'shang'.isupper()
False
>>> 'shang'.islower()
True
>>> 'SAHANG'.islower()
False
>>> 'SAHANG'.isupper()
True
>>> 'shang'.title()
'Shang'
>>> 'shang'.upper()
'SHANG'
>>> 'SHANG'.lower()
'shang'
>>>
endswith('str') #判断是否以str结尾输出结果为True或者False
startswith('str') #判断是否以str开头输出结果为True或者False
isdigit() #判断字符串是否全部由数字组成
isalpha() #判断字符串是否全部由字母组成
isalnum() #判断字符串是全部由字母和数字组成
示例:
>>> filename = 'daojishui.sh'
>>> filename.endswith('.sh')
True
>>> filename.startswith('dao')
True
>>> filename.isdigit()
False
>>> '1234'.isdigit()
True
>>> filename.isalpha()
False
>>> 'hahahah'.isalpha()
True
>>> 'hahahah'.isalnum()
True
strip() #去除左右两边的空格,空格为广义的空格 包括:\t \n
lstrip() #去除左边的空格,空格为广义的空格 包括:\t \n
rstrip() #去除右边的空格,空格为广义的空格 包括:\t \n
#同时也可以在括号中指定字符,将左右两边的指定字符串去除
示例:
>>> s = ' \t\t sehahahase \n\n\t' #定义字符串变量
>>> s.strip() #去除左右两边的空格
'sehahahase'
>>> s.lstrip() #去除左边的空格
'sehahahase \n\n\t'
>>> s.rstrip() #去除右边的空格
' \t\t sehahahase'
>>> ss='sehahahase' # 定义变量
>>> ss.strip('se') #去除两边的指定字符
'hahaha'
>>> ss.lstrip('se') #去除左边的指定字符
'hahahase'
>>> ss.rstrip('se') #去除右边的指定字符
'sehahaha'
>>>
练习:
变量名定义是否合法:
1.变量名可以由字母 数字 下划线组成
2.变量名只能以字母和或者下划线开头
while True:
name=input('NUM : ')
if name == 'exit' :
print('即将退出')
break
if name[0].isalpha() or name[0] == '_' :
for i in name[1:]:
if not (i.isalnum() or i == '_'):
print('变量不合格')
break
else :
print('变量合格')
else :
print('变量不合格')
字符串的对齐:
center(num,'*') #预留为值num个 指定字符串居中,剩下的以* 天填充,不指定默认以空格填充
ljust(num,'*') #预留为值num个 指定字符串居左,剩下的以* 天填充,不指定默认以空格填充
rjust(num,'*') #预留为值num个 指定字符串居右,剩下的以* 天填充,不指定默认以空格填充
示例:
>>> 'shang'.center(40)
' shang '
>>> 'shang'.center(40,'*')
'*****************shang******************'
>>> 'shang'.ljust(40,'*')
'shang***********************************'
>>> 'shang'.rjust(40,'*')
'***********************************shang'
>>> 'shang'.rjust(40,)
' shang'
>>> 'shang'.ljust(40)
'shang '
>>>
字符串的搜索和替换:
find 找到子字符串,并返回最小的索引
>>> s = 'shanghello' #定义字符串
>>> s.find('s') #搜索s并返回最小索引
0
>>> s.find('h') #搜索s并返回最小索引,存在两个h 返回的是最小的索引
1
>>> s.find('h',4,6) # 指定索引范围内搜索h 并返回最小索引
5
replace(old,new) 替换字符串中的old内容为new
>>> s = 'shang'
>>> s.replace('s','f')
'fhang'
>>>
字符串的统计:
count(子字符串) #统计子字符串出现的次数
len(字符串) #统计字符串的长度
示例:
>>> s = 'shanxixianyang'
>>> s.count('x')
2
>>> s.count('a')
3
>>> len(s)
14
>>> len('hahaha')
6
>>>
字符串的分离和连接:
split(分隔符) #以指定的分隔符将字符串分隔成几部分
符号.join(分隔后的字符串) #用符号将分隔后的字符串重新连接起来
示例:
>>> date = '2019.05.24' # 定义字符串
>>> date1 = date.split('.') # 以.为分隔符进行分离
>>> date1
['2019', '05', '24'] # 分离后的结果
>>> date1[1] #分离后支持索引
'05'
>>> date1[:]
['2019', '05', '24']
>>> date1[::-1]
['24', '05', '2019']
>>> '-'.join(date1) #用-进行连接分离后的字符串
'2019-05-24'
>>> '/'.join(date1) # 用/进行连接分离后的字符串
'2019/05/24'
>>>
练习:
1 题目描述:
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,
单词用空格分割, 单词之间只有一个空格,前后没有空格。
“hello xiao mi”-> “mi xiao hello”
sentence=input('please input : ')
sentence1=sentence.split(' ')
sentence2=sentence1[::-1]
print(' '.join(sentence2))
效果演示:
[root@foundation47 day 02]# python3 2.7.py
please input : hello xiao mi
mi xiao hello
[root@foundation47 day 02]# python3 2.7.py
please input : it is hot
hot is it
[root@foundation47 day 02]#
2 设计一个程序,帮助小学生练习10以内的加法
- 随机生成加法题目;
- 学生查看题目并输入答案;
- 判别学生答题是否正确?
- 退出时, 统计学生答题总数,正确数量及正确率(保留两位小数点);
i = 0
m = 0
import random
print('如果要退出请输入 q')
while True:
num1 = random.randint(0, 10)
num2 = random.randint(0, 10)
print('%d + %d = ' % (num1, num2))
anwser = input('答案是:')
if anwser == 'q':
break
if int(anwser) == num1 + num2:
m += 1
print('回答正确')
else:
print('回答错误')
i += 1
if i == 0:
print('还未开始答题')
else :
p = m / i
print('共计答题%d ,正确%d , 正确率%.2f%%' % (i, m, p * 100))
3 小学生算术能力测试系统:
设计一个程序,用来实现帮助小学生进行百以内的算术练习,
它具有以下功能:提供10道加、减、乘或除四种基本算术运算的题目;
练习者根据显示的题目输入自己的答案,
程序自动判断输入的答案是否正确并显示出相应的信息。
i = 0
m = 0
import random
while i < 10:
op = ['+', '-', '*', '/']
act = random.choice(op)
num1 = random.randint(0, 100)
num2 = random.randint(0, 100)
if act == '+' :
anwser = input('%d + %d = ' % (num1, num2))
if int(anwser) == num1 + num2:
m += 1
print('回答正确')
else:
print('回答错误')
elif act == '-' :
anwser = input('%d - %d = ' % (num1, num2))
if int(anwser) == num1 - num2:
m += 1
print('回答正确')
else:
print('回答错误')
elif act == '*' :
anwser = input('%d * %d = ' % (num1, num2))
if int(anwser) == num1 * num2:
m += 1
print('回答正确')
else:
print('回答错误')
else:
anwser = input('%d / %d = ' % (num1, num2))
if int(anwser) == num1 / num2:
m += 1
print('回答正确')
else:
print('回答错误')
i+=1
p = m / 10
print(' 正确%d , 正确率%.2f%%' % (m, p * 100))