8 流程控制之for语句 基本数据类型之数据和字符串

流程控制之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 可迭代对象:
    代码块
  1. 列表
l1 = [0, 1, 2]
for each_l in l1:
	# 代码块
  1. 字典
    遍历字典,取出键
dict1 = {'un': 'un1', 'pw': 'pw1'}
for each_key in dict1:
	# 代码块 each_key为字典的键
  1. 字符串
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
  1. 作用
    将一个字符串或数字或布尔值转换为整型
    若无参数,输出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
  1. 参数
    参数是进制数,默认为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
  1. 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
  1. index() 方法检测字符串中是否包含子字符串
    包含子字符串则返回开始的索引值,否则抛出异常
    rindex()是从右往左检查,返回子字符串最后一次出现的位置
    str.index(str, beg=0, end=len(string))
  2. count() 方法用于统计字符串里某个字符出现的次数
    str.count(str, beg=0, end=len(string))
2.4.2 填充 center, ljust, rjust, zfill
  1. 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***
  1. ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
    str.ljust(width[, fillchar])
  2. rjust() 方法返回一个原字符串右对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
    str.rjust(width[, fillchar])
  3. 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值