第四章
4.1 对象的布尔值
Python一切皆对象,所有对象都有一个布尔值,使用内置函数bool()来获取对象的布尔值
以下对象的布尔值为False
- False
print(bool(False))
- 数值0
print(bool(0))
- None
print(bool(None))
- 空字符串
print(bool(''))
print(bool(""))
- 空列表
print(bool([]))
print(bool(list()))
- 空元祖
print(bool(()))
print(bool(tuple()))
- 空字典
print(bool({}))
print(bool(dict()))
- 空集合
print(bool(set()))
4.2 程序的组织结构
4.2.1 顺序结构
4.2.2 选择结构
4.2.2.1 单分支结构
money = 1000 # 余额
s = int(input("请输入取款金额:"))
# 判读余额是否充足
if s <= money:
money = money - s
print("取款成功,余额为", money)
4.2.2.2 双分支结构
s = int(input("请输入一个整数:"))
if s % 2 == 1:
print(s, '为奇数')
else:
print(s, '为偶数')
4.2.2.3 多分支结构
s = int(input("请输入成绩:"))
if 90 <= s <= 100: # 这种写法是python独有的
print('成绩等级为A')
elif 80 <= s <= 89:
print('成绩等级为B')
elif 70 <= s <= 79:
print('成绩等级为C')
elif 60 <= s <= 69:
print('成绩等级为D')
elif s < 60:
print('成绩等级为E')
else:
print('所输入成绩不符合实际!')
4.2.2.4 嵌套if
'''
会员 >=200 8折
>=100 9折
不打折
非会员 >=200 9.5折
不打折
'''
answer=input('您是会员吗?Y/N')
money=float(input('请输入您的购物金额:'))
if answer=='Y':
if money>=200:
print('付款金额为:', money * 0.8)
elif 100<=money<200:
print('付款金额为:', money * 0.9)
else:
print('不打折,付款金额为:', money)
else :
if money>=200:
print('付款金额为:', money * 0.95)
else:
print('不打折,付款金额为:', money)
4.2.2.5 条件表达式
条件表达式是if…else…的简写
# 从键盘录入两个整数,比较两个整数的大小
num1 = int(input('请输入第一个整数:'))
num2 = int(input('请输入另一个整数:'))
'''
if num1 >= num2:
print(num1, '大于等于', num2)
else:
print(num1,'小于',num2)
'''
print(str(num1)+'大于等于'+str(num2) if num1 >= num2 else str(num1)+'小于'+str(num2))
4.2.3 循环结构
4.2.3.1 pass语句
pass语句,什么都不做,只是一个占位符,用到需要写程序的地方,这样程序就不会报错
answer = input("请问您是会员吗?Y/N")
if answer == 'Y':
pass
else:
pass
4.2.3.2 内置函数:range()函数
- 用于生成一个整数序列
- 返回值是一个迭代器对象
r = range(10)
print(r)
- 创建range对象的三种方式
- range(stop)
创建一个[0,stop)之间的整数序列,步长为1
r = range(10) print(r) print(list(r))
- range(start,stop)
创建一个[start,stop)之间的整数序列,步长为1
r = range(1, 10) print(list(r))
- range(start,stop,step)
创建一个[start,stop)之间的整数序列,步长为step
r = range(1, 10, 2) print(list(r))
- range(stop)
- in 与 not in 判断整数序列中是否存在(不存在)指定的整数
r = range(1, 10, 2)
print(list(r))
print(6 in r)
print(8 not in r)
-
range类型的优点
不管range对象表示的整数序列有多长, 所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop,step,只有当用到range对象时,才会去计算序列中的相关元素
4.2.3.3 while语句
选择结构的if和循环结构的while的区别:
if是判断一次,条件为true的条件执行体执行一次
while是判断N+1次,条件为true的条件执行体执行N次
# 计算1-100之间的偶数和
# 四步循环法:
# 1.初始化变量
# 2.条件判断
# 3.条件执行体(循环体)
# 4.改变变量
a = 1
sum = 0
while a <= 100:
if a % 2 == 0:
sum += a
a += 1
print(sum)
a = 1
s = 0
while a <= 100:
if not bool(a % 2):
s += a
a += 1
print(s)
4.2.3.4 for-in语句
in 表达从(字符串、序列等)中依次取值,又称为遍历
for-in 遍历的对象必须是可迭代对象
循环体内不需要访问自定义变量,可以将自定义变量用下划线代替
for _ in range(5):
print("今天也要加油鸭!")
# 使用for-in求1-100之间的偶数和
sum = 0
for a in range(1, 101):
if not a % 2:
sum += a
a += 1
print(sum)
#输出100至999之间的水仙花数
#水仙花数举例:153=1*1*1+5*5*5+3*3*3
for num in range(100, 1000):
a = num // 100 # 百位
b = num // 10 % 10 # 十位
c = num % 10 # 个位
if a ** 3 + b ** 3 + c ** 3 == num:
print(num)
4.2.3.5 break语句
break语句经常和if语句一起搭配使用,直接跳出循环
# 从键盘录入密码,最多录入3次,如果正确就结束循环
for i in range(3):
pw = input("请输入密码")
if pw == "8888":
print("密码正确")
break
else:
print("密码错误")
# 从键盘录入密码,最多录入3次,如果正确就结束循环
a = 0
while a < 3:
pw = input("请输入密码")
if pw == '8888':
print("密码正确")
break
else:
print("密码错误")
a += 1
4.2.3.6 continue语句
continue语句经常和if语句一起搭配使用,不执行后面的语句再重新开始循环
# 要求输出1到50之间所有5的倍数
for i in range(1, 51):
if not i % 5:
print(i)
for i in range(1, 51):
if i % 5:
continue
print(i)
4.2.3.7 else语句
if…else… :if条件表达式不成立时执行else
for…else… 和while…else… :没有碰到break时执行else语句
# 从键盘录入密码,最多录入3次,如果正确就结束循环
for i in range(3):
pw = input("请输入密码")
if pw == "8888":
print("密码正确")
break
else:
print("密码错误")
else:
print("对不起,三次密码均输入错误")
# 从键盘录入密码,最多录入3次,如果正确就结束循环
a = 0
while a < 3:
pw = input("请输入密码")
if pw == '8888':
print("密码正确")
break
else:
print("密码错误")
a += 1
else:
print("对不起,三次密码均输入错误")
4.2.3.8 嵌套循环
# 输出一个三行四列的矩阵
for i in range(3): # 行数
for j in range(4): # 列数
print('*', end='\t') # 不换行输出
print() # 换行
# 输出九九乘法表
for i in range(1, 10): # 行数
for j in range(1, i + 1): # 列数
print(i, '*', j, '=', i * j, end='\t') # 不换行输出
print() # 换行
4.2.3.9 二重循环中的break和continue
用于控制本层循环