流程控制之for语句 基本数据类型之数据和字符串
1. 流程控制之for语句
1.1 什么是for循环
重复执行相同的操作
1.2 为何要有for循环
for循环能做的事情,while循环也都可以做。
for循环语句在循环取值(遍历取值)方面比while循环语句更简洁。
1.3 与while循环对比
相同点:
都是循环,for循环能做的事情,while循环也都可以做。
不同点:
while循环称为"条件循环",循环次数取决于条件真假。
for循环称为"取值循环",循环次数取决于in后面包含的值的个数。
1.4 使用方法
for 变量名 in 可迭代对象:
代码块
- 列表
l1 = [0, 1, 2]
for each_l in l1:
# 代码块
- 字典
遍历字典,取出键
dict1 = {'un': 'un1', 'pw': 'pw1'}
for each_key in dict1:
# 代码块 each_key为字典的键
- 字符串
str1 = 'abcde'
for each_char in str1:
# 代码块
1.5 for循环控制循环次数:range()
Python3中range()函数返回一个可迭代对象
Python2中range()函数返回一个列表
range(stop)
range(start, stop[, step])
start: 计数起始值
stop: 计数终止值,计数不包括stop
step: 步长
1.6 continue
终止本次循环,开始下一次循环
1.7 for循环嵌套
外层的循环执行一次,内层循环需要完整地执行完毕。
终止for循环只有break一种方案
补充 print
补充1 逗号
参数用逗号分隔,输出用空格分隔。
print(1, 2, 3) # 1 2 3 输出用空格分隔
补充2 参数end
end:用来设定输出以什么结尾,默认值为换行符\n, 可替换为其它字符串(None or a string)
print(1, 2, 3, end='***')
print(1, 2, 3, end='***') # 输出为1 2 3***1 2 3***
2. 基本数据类型
2.1 数字类型
2.1.1 int
- 作用
将一个字符串或数字或布尔值转换为整型
若无参数,输出0
字符串中必须为纯数字
i = int('123') # 123
j = int(1.5) # 1 向下取整
k = int() # 0
l = int('1.5') # 报错
m = int(True) # 1
n = int(1 < 0) # 0
- 参数
参数是进制数,默认为10,表示前面参数所对应的进制数。
如果是带参数,要以字符串的形式进行输入。
二进制符号0b、八进制符号0o、十六进制符号0x
print(int('256', 10)) # 256为10进制数,转换为10进制为256
print(int('256', 8)) # 256为8进制数,转换为10进制为174
print(int('0o256', 8))
print(int('256', 16)) # 256为16进制数,转换为10进制为598
print(int('0x256', 16))
print(int('0o256', 16)) # 报错
print(int('a', 16)) # 10 不区分大小写
print(int('A', 16)) # 10
2.1.2 float
将十进制整数或十进制浮点数转换为浮点数。
print(float()) # 0.0
print(float(5)) # 5.0
print(float(-5)) # -5.0
print(float('0x123')) # 非十进制数报错
print('5') # 5.0
print(False) # 0.0
2.2 字符串类型
2.2.1 按照索引取值
正向取值,逆向取值
只能取,不能改,字符串属于不可变数据类型
msg = 'abc'
res = msg[0] # a
res = msg[-1] # c
2.2.2 切片操作
从字符串中取出子字符串
参数是截取范围和步长,左闭右开
msg = 'abcde'
res = msg[0:2] # ab
res = msg[0:5:2] # ace
res = msg[5:0:-2] # ec
res = msg[::-1] # 反转字符串
list[:] 相当于浅拷贝
l1 = [1, [2, 3]]
l2 = l1[:]
print(id(l1) == id(l2)) # False
print(id(l1[0]) == id(l2[0])) # True 整形:不可变数据类型
print(id(l1[1]) == id(l2[1])) # True 列表:不可变数据类型 => 浅拷贝
2.2.3 字符串长度 len
获取字符串的长度
len(str)
msg = 'abc'
res = len(msg) # 3
# 求整数位数
i = 1234
res = len(str(i)) # 4
2.2.4 成员运算 in
in/not in 判断一个字符串是否存在于目标字符串中
msg = 'abc'
res = 'a' in msg # True
res = 'a' not in msg # False
res = not 'a' in msg # False 不推荐
2.2.5 去除字符串两侧的值(空格)strip
移除字符串头尾指定的字符或字符序列
str.strip([chars])
msg = ' ab c '
res = msg.strip() # ab c 默认去除两侧空格
msg = ' abcedf***bbdf ddee'
res = msg.strip(' abcedf') # *** 去除指定字符序列
lstrip(): 删除字符串左侧指定字符或字符序列
rstrip(): 删除字符串右侧指定字符或字符序列
2.2.6 字符串分割 split
将字符串按照指定的分隔符进行切片,可以指定分隔符和分隔次数。
str.split(str, num)
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
num – 分割次数。默认为 -1, 即全部分隔
msg = ' ab c daef'
res = msg.split() # ['ab', 'c', 'daef'] 默认分隔符为空格
res = msg.split('a') # [' ', 'b c d', 'ef']
res = msg.split('a', 1) # [' ', 'b c daef']
2.2.7 循环遍历 for
msg = ' ab c daef'
for each_char in msg:
# 代码块
2.3.1 替换字符串大小写
str.lower(), str.upper()
msg = 'aBcDe'
resL = msg.lower() # abcde 将字符串中所有大写字符转换为小写
resU = msg.upper() # ABCDE 将字符串中所有小写字符转换为大写
2.3.2 startswith, endswith
判断字符串的开头和结尾字符
str.startswith(str, beg=0, end=len(string))
beg: 字符串检测的起始位置
end: 字符串检测的终止位置,不包括
msg = 'aBcDe'
resS = msg.startswith('a') # True
resE = msg.endswith('B', 0, 2) # True
2.3.3 格式化输出
format
%
f-string 字面量格式化字符串
2.3.4 字符串连接 join
将序列中的元素以指定的字符连接生成一个新的字符串
str.join(sequence)
str – 指定的连接字符
sequence – 要连接的元素序列
lst = ("r", "u", "n", "o", "o", "b") # 字符串序列
print("-".join(lst)) # r-u-n-o-o-b
print("".join(lst)) # runoob
2.3.5 字符串替换 replace
将字符串中的子字符串替换掉
str.replace(old, new[, max])
old – 被替换的子字符串
new – 新字符串
max – 替换最大次数
old_str = 'abcba'
new_str1 = old_str.replace('b', 'B') # aBcBa
new_str2 = old_str.replace('b', 'B', 1) # aBcba
2.3.6 isdigit
检测字符串是否只由数字组成
str.isdigit()
'123'.isdigit() # True
'12.3'.isdigit() # False
2.4.1 find, rfind, index, rindex, count
- find() 方法检测字符串中是否包含子字符串
包含子字符串则返回开始的索引值,否则返回-1
rfind()是从右往左检查,即返回子字符串最后一次出现的位置
str.find(str, beg=0, end=len(string))
str – 指定检索的字符串
beg – 开始索引,默认为0
end – 结束索引,默认为字符串的长度
str1 = 'abcabcabc'
str1.find('a') # 0
str1.find('a', 1) # 3
str1.find('a', 1, 3) # -1
str1.rfind('a') # 6
- index() 方法检测字符串中是否包含子字符串
包含子字符串则返回开始的索引值,否则抛出异常
rindex()是从右往左检查,返回子字符串最后一次出现的位置
str.index(str, beg=0, end=len(string)) - count() 方法用于统计字符串里某个字符出现的次数
str.count(str, beg=0, end=len(string))
2.4.2 填充 center, ljust, rjust, zfill
- center() 方法返回一个指定的宽度 width 居中的字符串
如果width小于字符串宽度直接返回字符串,否则使用fillchar去填充
str.center(width[, fillchar])
width – 字符串的总宽度
fillchar – 填充字符
str = 'abc'
print(str.center(2, '*')) # abc
print(str.center(4, '*')) # abc*
print(str.center(9, '*')) # ***abc***
- ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
str.ljust(width[, fillchar]) - rjust() 方法返回一个原字符串右对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
str.rjust(width[, fillchar]) - zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
str.zfill(width)
2.4.3 expandtabs
expandtabs()方法把字符串中的tab符号(’\t’)转为空格,默认空格数是8。
str.expandtabs(tabsize=8)
str = '1\t2'
print(str) # 1 2
print(str.expandtabs()) # 1 2
print(str.expandtabs(16)) # 1 2
2.4.4 captalize, swapcase, title
capitalize() 将字符串的第一个字母变成大写,其他字母变小写。
swapcase() 将字符串的大小写字母进行转换。
title() 将字符串所有单词的首个字母转化为大写,其余字母均为小写
str = 'abc aBc Abc'
print(str.capitalize()) # Abc abc abc
print(str.swapcase()) # ABC AbC aBC
print(str.title()) # Abc Abc Abc
2.4.5 is
islower 检测字符串中所有的字母是否都为小写
isupper 检测字符串中所有的字母是否都为大写
istitle 检测字符串中所有的单词首字母是否为大写,其他字母是否为小写
isalnum 检测字符串是否由字母和数字组成
isalpha 检测字符串是否只由字母或文字组成
isspace 检测字符串是否只由空格等空白字符(空格、制表符和换行)组成
isidentifier 检测字符串是否是有效的 Python 标识符,可用来判断变量名是否合法。
isdigit 检测字符串是否只由数字组成
isnumeric 检测字符串是否只由数字组成,这里数字可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字。
isdecimal 检查字符串是否只包含十进制字符
'Ⅰ'.isnumeric() # True 罗马数字
'贰'.isnumeric() # True 汉字数字
'三'.isnumeric() # True 汉字数字
'4'.isnumeric() # True 数字
3. 练习
3.1 for循环嵌套之打印99乘法表
for i in range(1, 10):
for j in range(i, 10):
print('{i} * {j} = {k}'.format(i=i, j=j, k=i*j), end='\t')
print('\n')
3.2 for循环嵌套之打印金字塔
for i in range(6):
star = '*' * (2 * i - 1)
print(star.center(9, ' '))
3.3 账号密码确认
un = 'un'
pw = 'pw'
for __ in range(3):
input_un = input('请输入用户名:').strip()
input_pw = input('请输入密码:').strip()
if input_un == un and input_pw == pw:
print('登陆成功!')
while 1:
cmd = input('请输入指令:').strip()
if cmd == 'q' or cmd == 'Q':
break
else:
print('命令{cmd}正在运行'.format(cmd=cmd))
break
else:
print('用户名或密码错误,请重新输入。')
else:
print('输入错误三次。')
3.4 字符串操作
有如下变量,请按照要求实现每个功能。
name = " aleX"
# 1. 移除 name 变量对应的值两边的空格,并输出处理结果
res1 = name.strip()
print(res1)
# 2. 判断 name 变量对应的值是否以 "al" 开头,并输出结果
res2 = name.startswith('al')
print(res2)
# 3. 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
res3 = name.endswith('X')
print(res3)
# 4. 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
res4 = name.replace('l', 'p')
print(res4)
# 5. 将 name 变量对应的值根据 “l” 分割,并输出结果。
res5 = name.split('l')
print(res5)
# 6. 将 name 变量对应的值变大写,并输出结果
res6 = name.upper()
print(res6)
# 7. 将 name 变量对应的值变小写,并输出结果
res7 = name.lower()
print(res7)
# 8. 请输出 name 变量对应的值的第 2 个字符
res8 = name[1]
print(res8)
# 9. 请输出 name 变量对应的值的前 3 个字符
res9 = name[:3]
print(res9)
# 10. 请输出 name 变量对应的值的后 2 个字符
res10 = name[-2:]
print(res10)
# 11. 请输出 name 变量对应的值中 “e” 所在索引位置
res11 = name.find('e')
print(res11)
# 12. 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo
res12 = name[:-1]
print(res12)