一、两值交换
示例:输入两个数字,让其按升序排列
该方法无需借助中间变量进行数据交换
a = int(input('请输入a的值:'))
b = int(input('请输入b的值:'))
if a > b:
a, b = b, a
print(f'a={a}, b={b}')
二、循环过程中的条件判断优化
示例:输出n个*,并在每输出w个后换行
for _ in range(n)
"_"下划线的含义是提醒程序员不要在这个循环体内使用这个变量的值,
并不影响循环的使用
# 优化前:for语句每执行一次,if语句都需进行判断,执行50000次就需判断50000次
n = int(input('符号总数:'))
w = int(input('每隔多少个换行:'))
for i in range(n):
print('*',end='')
if i%w==w-1:
print() # 换行
if n%w:
print() # 换行
# 优化后:只需执行一次判断
n = int(input('符号总数:'))
w = int(input('每隔多少个换行:'))
for _ in range(n // w): # 每行输出整数个*
print('*' * w)
rest = n % w
if rest: # 输出最后一行余数个*
print('*' * rest)
三、逻辑运算与位运算
已知x,y=1,2 ,求x,y的and,or,not,&,|运算的结果
问题:区分and和&、or和|的区别
x, y = 1, 2
# 位运算 x:0001 y:0010
print(x & y) # &运算结果:0000 ->0 (十进制)
print(x | y) # |运算结果:0011 ->3 (十进制)
# 逻辑运算
print(x and y) # and运算结果:2 从右往左解析。 1、有0取0 2、没0的情况,取右边第一个真值
print(x or y) # or运算结果:1 从左往右解析。 1、有0跳过,全为0则取0 2、从左取第一个真值
print(not x)
参考资料:python——and和or逻辑运算符用法详解_python or-CSDN博客
四、一行input()给列表和多变量赋值
需求:输入1 2 3 4,中间以空格隔开,生成元素为整型的列表[1,2,3,4],并分别给a,b,c,d四个变量赋值
方案一:常规方法
# 方法一 传统方法
num_str = input('请输入数字(以空格间隔):')
num_list = num_str.split(' ')
num_list_new = []
for i in num_list:
num_list_new.append(int(i))
print(num_list_new)
a,b,c,d = num_list_new
print(f'{a=}\t{b=}\t{c=}\t{d=}')
方案二:列表推导式
# 方法二 列表推导式
num_list = [int(i) for i in input('请输入数字(以空格间隔):').split()]
print(num_list)
a,b,c,d = num_list
print(f'{a=}\t{b=}\t{c=}\t{d=}')
方案三:map()映射函数
# 方法三 map()映射函数
num_list = list(map(int,input('请输入数字(以空格间隔):').split()))
print(num_list)
a,b,c,d = num_list
print(f'{a=}\t{b=}\t{c=}\t{d=}')
方案四:直接input().split(),缺点无法直接生成int类型的元素
# 方法四 直接input().split(),缺点无法直接生成int类型的元素
num_list = input('请输入数字(以空格间隔):').split()
print(num_list,type(num_list))
a,b,c,d = num_list
print(f'{a=}\t{b=}\t{c=}\t{d=}')
总结:
1、生成列表建议使用列表推导式
2、给多变量赋值建议使用map()函数,便于生成需求类型的元素
3、给字符变量赋值,直接input().split()
4、split()函数默认分割空格,无需引号+空格+引号。如果有其他分割标记可使用split(’分割标记‘)