什么是字符串
字符串是以单引号或双引号括起来的任意文本
# string(字符串).py
'abc'
"def"
字符串不可变,变量可变
创建字符串
str1 = "sunck is good man!"
str2 = "sunck is nice man!"
str3 = "sunck is handsome man!"
字符串运算
字符串连接
str = "sunck is a"
str = "good man"
str8 = str6 + str7
print("str6 =", str6)
print("str7 =", str7)
print("str8 = ", str8)
输出重复字符串
str9 = "good"
str10 = str9 * 3
print("str10 =", str10)
# 访问字符串中的某一个字符串
# 通过索引下标查找,索引从0开始
# 字符串名[下标]
str11 = "sunck is good man!"
print(str11[1])
# str11[1] = "a" # 字符串不可变
# print("str11 = ", str11)
截取字符串中的一部分
str13 = "sunck is a good man!"
# 从给定下标处到给定下标之前
str15 = str13[6:15]
# 从头截取到给定下标之前
str15 = str13[:5]
print("str15 =", str15)
# 从给定下标处开始截取到结尾
str17 = str13[16:]
print("str17 =", str17)
str18 = "sunck is good man!"
print("good" in str18)
print("good1" not in str18)
格式化输出
print("s is a good man!")
num = 10
str19 = "s is a nice man!"
f = 10.1234
print("num =", num, "str19 = ", str19)
# %d %s %f 占位符
# 精确到小数点后三位,会四舍五入
print("num = %d, str19 = %s, f = %.3f" % (num, str19, f))
转义字符
将一些字符转换成有特殊含义的字符
# /n
print("num = %d\nstr19 = %s\nf = %.3f" % (num, str19, f))
# \\ # 显示\后面的内容
print("sunck \\ is")
# 转译单引号\' 转义双引号\"
# 需要的效果:tom is a 'good' man
print('tom is a \'good\' man')
print("tom is a 'good' man")
print("tom is a \"good\" man")
# 如果字符串内有很多换行,用\n写在一行不好阅读
print("good \n nice \n handsome")
print("""
good
nice
handsome
""")
# \t 制表符(输出四个默认空格)
print("suck \t good")
# 如果字符串中有好多字符都需要转义,就需要加入好的斜杠\,为了简化,python允许用r表示内部的字符串默认不转义
# 需要效果\\\t\\
print(r"\\\t\\")
print(r"C:\Users\xlg\Desktop\Python-1704\day03")
print("C:\\Users\\xlg\\Desktop\\Python-1704\\day03")\
"""
windows路径
C:\Users\xlg\Desktop\Python-1704\day03
linux路径
/root/user/sunck/Desktop
"""
eval(str)
功能:
将字符串str当成有效的表达式来求值并返回计算结果
num1 = eval("123")
print("num1")
print(type(num1))
print(eval("+123"))
print(eval("-123"))
print(eval("12+3"))
print(eval("12-3")) # 注意int不同,此处不报错
# print(eval("12a3")) 报错
# print(eval("a123")) 报错
len(str)
返回字符串的长度
print(len("sunck is a good man!"))
print(lover(ster20))
lower(s)转换字符串中大写字母为小写字母
相当于新生成一个字符串,原字符串依然遵循不可改变的原则
str20 = "Sunck Is a good man!"
str21 = str20.lower()
print(str21)
print("str20 = %s" % str20)
upper()转换字符串中小写字母为大写字母
print("Sunck is a good Man!".upper())
str21 = Sunck is a good Man!
print(str21.upper())
swapcase() 转换字符串中小写字母为大写字母,大写字母为小写字母
str22 = "sunck is a GOOD man!"
print(str22.swapcase())
capitalize() 首字母大写,其他小写
str23 = "sunck is a GOOD man!"
print(str23.capitalize())
title() 每个单词的首字母大写
str24 = "sunck is a GOOD man!"
print(str24.title())
character char 字符
center(width, fillchar) (一个字符)居中
返回一个指定宽度的居中字符串,fillchar为填充的字符串,默认空格填充
str25 = "kaige is a GOOD man!"
print(str25.center(40, "*"))
ljust(width[, fillchar]) 左对齐
返回一个指定宽度的左对齐字符串,fillchar为填充的字符串,默认空格填充
str26 = "sunck a GOOD man!"
print(str26.ljust(40, "%"))
rjust(width[, fillchar]) 右对齐
返回一个指定宽度的右对齐字符串,fillchar为填充的字符串,默认空格填充
str27 = "sunck a GOOD man!"
print(str27.rjust(40, "%"))
zfill(width)
返回一个长度为width的字符串,原字符串右对齐,前面补0
str28 = "sunck a GOOD man!"
print(str28.zfill(40))
count(sub[, start][, end])
返回字符串中sub出现的次数,可以指定一个范围,默认从头到尾
str29 = "kaige is a very very GOOD man!"
print(str29.count("very", 15, len(str29)))
find(str[, start][, end])
从左向右检测str字符串是否包含在字符串中,可以指定范围,默认从头到尾,得到第一次出现的开始下标,没有返回-1
str30 = "kaige is a very very GOOD man!"
print(str30.find("very"))
# print(str30.find("nice"))
print(str30.find("very", 15, len(str30)))
rfind(str[, start][, end])
str30 = "kaige is a very very GOOD man!"
print(str30.rfind("very"))
# print(str30.rfind("nice"))
print(str30.rfind("very", 15, len(str30)))
index(str, start=0, end=len(str))
跟find()一样,只不过如果str不存在的时候会报一个异常
str31 = "kaige is a very very good man!"
print(str31.index("very"))
rindex(str, start=0, end=len(str))
跟rfind()一样,只不过如果str不存在的时候会报一个异常
str32 = "kaige is a very very good man!"
print(str32.index("very"))
lstrip()截掉左侧指定的字符,默认为空格
str33 = "###############kaige is a good man"
print(str33.lstrip("#"))
rstrip()截掉右侧指定的字符,默认为空格
str34 = "###############kaige is a good man*************"
print(str34.rstrip("*"))
strip() 前后都去掉,中间的去不掉
str35 = "***************kaige** is a good man*************"
print(str35.strip("*"))
ASCLL码转换
str36 = "a"
print(ord(str36))
str37 = chr(65)
print(str37)
字符串可以比较大小
print("a" == "a")
split(str = “”, num)
以str为分隔符截取字符串,指定num,则仅截取num个字符串
str38 = "sunck**is*******a******good****man"
list39 = str38.split("*")
print(list39)
c = 0
for s in list39:
if len(s) > 0:
c += 1
print(c)
splitlines([keepends]) 安装(’\r’,’\r\n’,’\n’)分隔
keepends == True 会保留换行符
str40 = '''sunck is a good man!
sunck is a nice man!
sunck is a handsome man!
'''
print(str40.splitlines())
join(seq) 以指定的字符串分隔符,将seq中的所有元素组合成一个字符串
list41 = ["sunck","is","a","good","man"]
str42 = "&^%$#".join(list41)
print(str42)
max() min()
str43 = "sunck is a good man!z"
print(max(str43))
print("*"+min(str43)+"*")
replace(oldstr,newstr,count)
用newstr替换oldstr,默认是全部替换。如果指定了count,那么只替换前count个
str44 = "sunck is a good good good man"
str45 = str44.replace("good","nice",1)
print(str44)
print(str45)
创建一个字符串映射表
print("*****************")
#### 要转换的字符串 目标字符串
t46 = str.maketrans("ac", "65")
#### a--6 c--5
str47 = "sunck is good man"
str48 = str47.translate(t46)
print(str48)
startswith(str, start=0, end=len(str))
在给定范围内判断是否是以给定的字符串开头,如果没有指定范围,默认整个字符串
str49 = "sunck is a good man"
print(str49.startswith("sunck", 5, 16))
endswith(str, start=0, end=len(str))
在给定范围内判断是否是以给定的字符串结尾,如果没有指定范围,默认整个字符串
str50 = "sunck is a nice man"
print(str50.endswith("man"))
编码
encode(encoding=“utf-8”, errors=“strict”)
str51 = "sunck is a good man凯"
#### ignore忽略错误
data52 = str51.encode("utf-8", "ignore")
print(data52)
print(type(data52))
解码 注意:要与编码时的编码格式一致
str53 = data52.decode("gbk", "ignore")
print(str53)
isalpha()
如果字符串中至少有一个字符且所有的字符都是字母返回True,否则返回False
str54 = "sunckisagoodman"
print(str54.isalpha())
isalnum()
如果字符串中至少有一个字符串且所有的字符都是字母或数字返回True,否则返回False
str55 = "la2b3"
print(str55.isalnum())
isupper()
如果字符串中至少有一个英文字符且所有的英文字符都是大写的英文字母返回True,否则返回False
print("ABC".isupper())
print("1".isupper())
print("ABC1".isupper())
print("ABC#".isupper())
islower()
如果字符串中至少有一个英文字符且所有的英文字符都是小写的英文字母返回True,否则返回False
print("abc".islower())
print("abcA".islower())
print("1".islower())
print("abc1".islower())
print("abc#".islower())
istitle()
如果字符串是标题化的返回True,否则返回False
print("Sunck Is".istitle())
print("Sunck is".istitle())
print("sunck is".istitle())
isdigit()
如果字符串中只包含数字字符返回True,否则返回False
print("123".isdigit())
print("123a".isdigit())
isnumeric()
print("123".isnumeric())
print("123a".isnumeric())
字符串中只包含十进制字符
print("123".isdecimal())
print("123z".isdecimal())
如果字符中只包含空格则返回True,否则返回False
print(" ".isspace())
print(" ".isspace())
print("\t".isspace())
print("\n".isspace())
print("\r".isspace())
while语句
格式:
while 表达式:
(一个tab)语句
逻辑:
当程序执行到while语句时,首先计算”表达式“的值,如果表达式的值为假,那么结束整个while语句。
如果”表达式“的值为真,则执行“语句”,执行完“语句”再去计算“表达式”的值。
如果”表达式“的值为假,那么结束整个while语句,
如果“表达式”的值还为真,则执行“语句”,执行完“语句”再去计算“表达式”的值
如此循环往复,直到表达式的值为假才停止。
num = 1
while num <= 5:
print(num)
num += 1
计算1+2+,,,,+100
sum = 0
num = 1
while num<= 100:
sum += num
num += 1
print("sum = %d" % (sum))
str = "zhangkaibo is a good man"
index = 0
while index < len(str):
print("str[%d] = %s" % (index, str[index]))
index += 1
打印出所有三位数中的水仙花数
# 打印出所有三位数中的水仙花数
num = 0
while num<1000:
a = num % 10
b = num // 10 % 10
c = num // 100
if num == a**3 + b**3 + c**3:
print(a,b,c)
num += 1
老师的答案
num = 100
while num <= 999:
a = num % 10
b = num // 10 % 10
c = num // 100
if num == a**3 + b**3 + c**3:
print(num)
num += 1
告诉我五位数中有多少个回文数
num = 10000
while num < 100000:
a = num % 10
b = num // 10000
if a != b:
num += 1
else:
a = num % 100
b = num // 1000
if a != b:
num += 1
else:
print(num)
num += 1
从控制台输入一个数,判断是否是质数
有坑
num = int(input())
if num == 2:
print("yes")
index = 2
while index <= num - 1:
if num % index == 0:
print("no")
index += 1
if index == num:
print("yes")
从控制台输入一个数,分解质因
num = int(input())
i = 2
while num != 1:
if num % i == 0:
print(i)
num //= i
else:
i += 1
从控制台输入一个字符串,返回这个字符串中有多少个单词
sf sdf gwe wagr 4
sdfsdg sg esrhg 3
注意:
去掉字符串前后的空格
单词中间有多个空格
循环时超出字符串长度
str = input()
str1 = str.strip()
index = 0
count = 0
while index < len(str1):
while str1[index] != " ":
index += 1
if index == len(str1):
break
# 结束这个循环
count += 1
print(count)
if index == len(str1):
break
while str1[index] == " ":
index += 1
print(count)
从控制台输入一个字符串,打印出这个字符串中所有数字字符的和
adlsfjei45sdjg8
sdfsadf6afs87
a->数字-> 二进制
str = input()
index = 0
sum = 0
while index < len(str):
if str[index] >= "0" and str[index] <= "9":
sum += int(str[index])
index += 1
print("sum = %d" % (sum))
字符串比较大小
从第一个字符串开始比较,谁的ASCII的值大谁就大,如果相等会比较下一个字符的ASCII值大小,那么谁的值大谁就大\
print("ms" == "ms") # 默认末尾都有 |0