Python基础语法7
用数据做判断:布尔值
计算机的逻辑判断,只有两种结果,就是True(英文意思是“真”)和False(英文意思是“假”),没有灰色地带。这个计算真假的过程,叫做【布尔运算】。
True和False,也就叫做【布尔值】
例:
print(3 < 5)
print(3 > 5)
print('长安' == '长安')
print('长安' != '金陵')
'''
True
False
True
True
'''
- print()括号内的计算其实就是【布尔运算】。终端上出现的True和False我们称为【布尔值】
- 第1行和第2行代码很简单。后面两行:两个字符串'长安'相等,结果正确,所以打印为True。而字符串'长安'和字符串'金陵'做比较,结果不相等,!=代表不等号,结果正确,打印为True。
- 只有当条件判断为True时,if和while后面的子句才会执行下去。
- 例
while False:
print('while False')
#终端上不显示任何结果
- while循环执行,必须要while后的条件为“真”,而【布尔值】False本身就是“假”,所以这个循环一次都没运行就结束了
- 同理,3>5这个条件恒为“假”,如果把while False换成while 3>5,效果会是一样的——什么都不会出现。
while 3>5:
print('while False')
- 如果用while True或者while 3<5来做条件,程序将会不限次数地运行,陷入【死循环】
- 【布尔值】对条件判断语句有一样的效果:
if False:
print('if False')
if True:
print('if True')
#if True
两个数值作比较
- 特别提醒:在代码中,A == B表示A和B相等,==表示相等关系;而=表示给变量赋值。=和==虽然长得相似,但没有任何关系。
直接用数值做运算
if 1:
print('熊猫')
- 整数1在这里就是作为一个条件,被判断为真(True)。这就是数值本身作为一个条件,被判断真假的情况。
- None,它代表的是【空值】,自成一派,数据类型是NoneType。要注意它和0的区别,0是整数0,可并非什么都没有
- 可以使用bool()函数来查看一个数据会被判断为真还是假。这个函数的用法与type()函数相似,在bool()函数括号中放入我们想要判断真假的数据,然后print出来即可。
print('以下数据判断结果都是【假】:')
print(bool(False))
print(bool(0))
print(bool(''))
print(bool(None))
print('以下数据判断结果都是【真】:')
print(bool(True))
print(bool(1))
print(bool('abc'))
布尔值之间的运算
and、or、not、in、not in五种运算
a = 1
b = -1
print('以下是and运算')
if a==1 and b==1: # 【b实际上是-1】
print('True')
else:
print('False')
print('以下是or运算')
if a==1 or b==1: # 【b实际上是-1】
print('True')
else:
print('False')
'''
以下是and运算
False
以下是or运算
True
'''
- a==1 and b==1的意思是【a=1并且b=1】,要两个条件都满足,才能判断为True,而a==1 or b==1的意思是【a=1或者b=1】,只要两个条件满足一个,就能判断为True。
- 【not】运算很简单,表示翻转的意思。not True就等于False,not False就等于True
- 【in】和【not in】两种运算,【in】的意思是“判断一个元素是否在一堆数据之中”,【not in】反之。
四种新的语句
break语句
break的意思是“打破”,是用来结束循环的,一般写作if...break
# break语句搭配for循环
for...in...:
...
if ...:
break
# break语句搭配while循环
while...(条件):
...
if ...:
break
+if...break的意思是如果满足了某一个条件,就提前结束循环。这个只能在循环内部使用。
- 例
for i in range(5):
print('明日复明日')
if i==3: # 当i等于3的时候触发
break # 结束循环
i = 0
while i<5:
print('明日复明日')
i = i+1
if i==3: # 当i等于3的时候触发
break # 结束循环
PS:if之下的语句要缩进4个空格(按一次Tab键),这里的if...break又嵌套在while或for循环中,而循环语句本身又要缩进4个空格。这样一来,break就缩进了【4+4=8】个空格(按两次Tab键)。【注】:Tab键和空格键不能同时混用。
练习:用python描述故事:
- 《西游记》里面有一个车迟国,车迟国里面有个陈家庄,陈家庄的河里有一个鲤鱼精,每一年都要陈家庄上供一对童男童女给自己吃,庄里的人家真是苦不堪言。这种年复一年的循环状态,在唐僧师徒来到这里后,结束了。因为孙悟空制服了这个鲤鱼精,百姓再也不用受苦了!真好。
while True:
print('要给妖怪进贡童男童女')
hero = input('大圣来了吗?回复:来了or没来')
if hero == '来了':
break
print('鲤鱼精被制服')
continue语句
continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
# continue语句搭配for循环
for...in...:
...
if ...:
continue
...
# continue语句搭配while循环
while...(条件):
...
if ...:
continue
...
- 示例
# continue语句搭配for循环
for i in range(5):
print('明日复明日')
if i==3: # 当i等于3的时候触发
continue # 回到循环开头
print('这句话在i等于3的时候打印不出来')
# continue语句搭配while循环
i = 0
while i<5:
print('明日复明日')
i = i+1
if i==3: # 当i等于3的时候触发
continue # 回到循环开头
print('这句话在i等于3的时候打印不出来')
练习:西夏公主选驸马
while True:
q1 = input('第一问:你一生之中,在什么地方最是快乐逍遥?')
if q1 != '黑暗的冰窖':
continue
print('答对了,下面是第二问:')
q2 = input('你生平最爱之人,叫什么名字?')
if q2 != '梦姑':
continue
print('答对了,下面是第三问:')
q3 = input('你最爱的这个人相貌如何?')
if q3 == '不知道':
break
print('都答对了,你是虚竹。')
pass语句
- pass语句非常简单,它的英文意思是“跳过”
a = int(input('请输入一个整数:'))
if a >= 100:
pass
else:
print('你输入了一个小于100的数字')
- 当a>=100的时候,跳过,什么都不做。其他情况,也就是a<100的时候,执行一个print语句
- 如果没有pass来占据一个位置表示“什么都不做”,以上的代码执行起来会报错
else语句
else语句,我们在条件判断语句见过【else】,else不但可以和if配合使用,它还能跟for循环和while循环配合使用
for i in range(5):
a = int(input('请输入0来结束循环,你有5次机会:'))
if a == 0:
print('你触发了break语句,循环结束,导致else语句不会生效。')
break
else:
print('5次循环你都错过了,else语句生效了。')
'''
请输入0结束循环,你有5次机会:9
请输入0结束循环,你有5次机会:6
请输入0结束循环,你有5次机会:0
你触发了break语句,导致else语句不会生效。
'''
- 当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。
- 在while循环中,else的用法也是如此,格式一模一样:
i = 5
while i:
a = int(input('请输入0来结束循环,你有5次机会:'))
i -= 1
if a == 0:
print('你触发了break语句,循环结束,导致else语句不会生效。')
break
else:
print('5次循环你都错过了,else语句生效了。')
循环小练习:
- 猜24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。
num = 24
print('我已经想好了一个数,请你猜一猜:\n')
while True:
yourguess = int(input('请输入你猜的数字:'))
if yourguess < num:
print('你猜的数字小了')
elif yourguess > num:
print('你猜的数字大了')
else:
print('恭喜你猜对了')
break
-
问题进阶
num = 24
print('我已经想好了一个数,请你猜一猜:\n')
chance = 3
while chance:
print('现在你有' + str(i) + '次机会')
chance -= 1
yourguess = int(input('请输入你猜的数字:'))
if yourguess < num:
print('你猜的数字小了')
elif yourguess > num:
print('你猜的数字大了')
else:
print('恭喜你猜对了')
break
else:
print('3次机会已经用完,失败了')
练习:
- 让程序收集两名囚犯的认罪情况,进而决定他们的判决:
两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。
listchoice = []
n = 0
while True:
n += 1
print('现已押解第' + str(n) + '对犯人' + ':请审问')
choice_A = input('A的选择:认罪or不认 ')
choice_B = input('B的选择:认罪or不认 ')
listchoice.append([choice_A,choice_B])
if choice_A == '认罪' and choice_B == '认罪':
print('皆为10年之刑')
elif choice_A == '不认' and choice_B == '认罪':
print('B判1年,A判20年')
elif choice_A == '认罪' and choice_B == '不认':
print('A判1年,B判20年')
elif choice_A == '不认' and choice_B == '不认':
print('停止实验')
break
else:
n -= 1
continue
print('此为最优解')
for i in range(n):
print('第' + str(i + 1) + '对实验者的选择是:' + str(listchoice[i]))