文章目录
教你用 python 辨别"真假是非"
02-python 基础语法知识-01流程控制
总体 要讲的大纲内容 如下
- 循环- for while
- 流程中断 continue break
- 逻辑操作 and ,or ,not
- 函数
- python中的异常处理
今天是我们学习python 第5次内容,回忆之前 我们之前学习的内容,我们主要讲了一些python中 常用的类型,数字,字符串 ,元祖,字典,集合等 这些内容,以及介绍了这些数据类型的一些操作。当然有很多了,实际上 很多的方法,你可能没有办法 全部记得 ,记得多多复习才行。
今天咱们不继续 说 数据类型,咱们要开始 学习流程控制 。有了一些基础的数据类型 在说 一些流程控制的相对 简单一点。
真值检测
介绍完 基础的数据结构后,这个时候 聊聊 真值检测比较 合适,在python 中什么认为 是真, 什么是假?
最直接办法 感觉 基本 都能对,哈哈, python是不是很简单 !
比如 10> 5 为真 ,10== 10 为真 。
还有一些 比较复杂的,
-
None ,False 这些 都是假
-
0 , 0.0 这些值 都为假
-
空的数据类型 ,之前 我们学的所有的数据类型 list, tuple, dict ,str ,set ,range
比如 [] ,() ,{} ,’’ ,set(), range(0) 全是假
如何判断真假
你可能说 这有什么难的? 很简单的啊。听我慢慢道来 。
如果 不确定 一个东西是真 是假, 可以用一个 函数 bool(元素) 它的返回值,True 或者 False
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(0.1)
True
>>> bool([])
False
>>> bool(dict())
False
>>> bool(set())
False
>>> bool(tuple())
False
说说哪些是真值, 之前的基础数据类型,dict ,set ,frozenset,tuple ,list 只要里面有元素 ,不论是什么, 它一定是真值。
举个例子 :
有一个list ,有一个元素 0, nums=[0,]
,bool(nums) 就为True
>>> bool(0)
False
>>> # 注意这里的区别
>>> bool([0])
True
>>> #list 中放入一个元素,不论这个元素本身 是真还是假值, 整体就是真值。
>>> bool([[]])
True
其他的几种也是类似的性质,只要记住 容器类型,只要放入一个其他的元素 ,不管元素本身真假,这个整体就是真值 。
来看下例子:
>>> t = tuple([[],])
>>> bool(t)
True
>>> bool(1)
True
>>> s = set([0])
>>> bool(s)
True
>>> # 空字符串 是假, 字符里面是空格 这个就是真值。
>>> bool('')
False
>>> bool(' ')
True
看到了吗,很多你想不到的情况吧,字符串有一个空格,这个字符串 就是真值,字符串中什么都没有才是假值 。
如何判断真假, 对于dict,list ,set ,tuple ,list 只要里面有元素,就一定是真值 。
逻辑运算
python中的逻辑运算 ,就是 与 ,或 ,非 分别对应关键字 and , or , not
0 代表 假 , 1 代表真 。
这个表格 的意思
对于 and 必须 两个表达式 都为真, 这个表达式才是真 ,否则就假。
对于or 表达式 只要一个为1 , 这个表达式 就是真 。
对于 not 表达式 ,就是取相反 的值。原来p为真,not p 就为假。
p | q | p and q | p or q |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 |
p | not p |
---|---|
1 | 0 |
0 | 1 |
还有一点逻辑运算的值 是什么?
有很多人认为 逻辑运算的值不是 True or False 吗?
Operation | Result | Notes |
---|---|---|
x or y | if x is False, then y, else x | (1) |
x and y | if x is False, then x, else y | (2) |
not x | if x is False, then True , else False | (3) |
对于 or 的运算符
x or y
如果x 为真值,整个表达式 的值 就是 x , 无论 y 是什么,
如果 x 为假值, 整个表达式的 值 就是 y
>>> r = [1,2,3] or 0
>>> r
[1, 2, 3]
>>> 1 or [1,2,3]
1
>>> True or [1,2,3]
True
>>> 1 or [1,2,3]
1
>>> (4,5) or [1,2,3]
(4, 5)
>>> r = 0.0 or ['one','two']
>>> r
['one', 'two']
对于and 运算符
x and y
如果 x 为假值,整个 表达式 就是 x ; 如果x 为真值,整个表达式的值 就是 y
>>> # x 为假值
>>> 0.0 and 'frank'
0.0
>>> False and ['one','two']
False
>>> None and ['one','two'] # 这里返回None
>>> {} and 'frank'
{}
>>> r = {} and 'frank'
>>> r
{}
>>> # x 为真值
>>> 1 and 'frank'
'frank'
>>> 1 and {}
{}
>>> 1 and tuple()
()
>>> True and 'aaa'
'aaa'
not 运算符 返回值 只有 真假 True, False
>>> not 'fff'
False
>>> not {}
True
>>> not tuple()
True
>>> not []
True
if 语句
形式如下, 如果条件表达式 为真值,执行语句1 ,否则执行语句2
if 条件表达式:
pass #语句1
else:
pass #语句2
num = 10
if num > 5:
print("Hello Frank")
else:
print("Hello World")
这里num =10 , 显然 大于5 所以 打印 Hello Frank
num> 5
这个就是条件表达式。
如果条件中有多个分支, 安装 下面的结构 写法
num = 10
if num >= 10:
print(f"num={num}")
elif num >= 5:
print(f"num={num}")
else:
print(f"num < 5 ,num={num}")
for 语句
在之前介绍 基础数据结构中 介绍了 for 语句,还记得 我们是如何遍历 list的吗 ?
>>> for i in range(4):
... print(i)
...
0
1
2
3
今天 咱们就说下 for 语句 ,
for 元素 in iterable :
pass
iterable 中文的意思 可迭代对象 , 在python基础的类型 哪些是可迭代对象呢?
list ,tuple ,dict ,set ,str ,range() 都是 可迭代对象 .
>>>
... person = {
... 'weight': 60,
... 'name': 'frank',
... 'height': 165,
... 'hobby': 'swimming'
... }
>>> for p in person:
... print(p)
...
weight
name
height
hobby
>>> for i in ['one','two','three']:
... print(i)
...
one
two
three
>>>
>>> for i in ('one','two','three'):
... print(i)
...
one
two
three
>>>
>>> for i in "Frank":
... print(i)
...
F
r
a
n
k
>>> # set
>>> for i in set(['one','two','three']):
... print(i)
...
two
one
three
看到 这么多数据类型 都是可以迭代的 。
for小练习
来做一个 小练习, 我们来通过 for 来实现 9*9 运算表, 思考一下?
for i in range(1, 10, 1):
for j in range(1, i + 1, 1):
print(f"{i}*{j} = {i * j} ", end=' ')
print()
结果如下
1*1 = 1
2*1 = 2 2*2 = 4
3*1 = 3 3*2 = 6 3*3 = 9
4*1 = 4 4*2 = 8 4*3 = 12 4*4 = 16
5*1 = 5 5*2 = 10 5*3 = 15 5*4 = 20 5*5 = 25
6*1 = 6 6*2 = 12 6*3 = 18 6*4 = 24 6*5 = 30 6*6 = 36
7*1 = 7 7*2 = 14 7*3 = 21 7*4 = 28 7*5 = 35 7*6 = 42 7*7 = 49
8*1 = 8 8*2 = 16 8*3 = 24 8*4 = 32 8*5 = 40 8*6 = 48 8*7 = 56 8*8 = 64
9*1 = 9 9*2 = 18 9*3 = 27 9*4 = 36 9*5 = 45 9*6 = 54 9*7 = 63 9*8 = 72 9*9 = 81
上面 你可能 不知道 print() 中 end 这里 就是 打印完内容后 添加 空字符串 , 在进行下一次打印, 默认情况下 print() 会打印一个空行。
while 语句
while 语句
while 条件表达式:
pass
如果 条件表达式 为真值, 则进行 while 下面的pass 的语句段,通常 在pass 语句段里面要 有能够改变 条件表达值 真值的语句, 如果 没有这个语句,一旦进入while ,永远退出不了 while 代码块
count = 0
while count < 5:
print(f"current count = {count}")
count = count + 2
print("while block end.")
结果如下:
current count = 0
current count = 2
current count = 4
while block end.
这里count< 5
就是条件表达式 ,每次 count +2 , 当count =6 的时候 ,count< 5
就为假值, 就开始执行 while 下面的一句代码段 。
break
break 可以提前 终止循环, 比如 有些时候 我们想 在遍历一些 元素的时候 想提前 结束循环,举个例子
>>> for i in range(5):
... print(f"i = {i}")
... print('hello world')
i = 0
i = 1
i = 2
i = 3
i = 4
hello world
这个时候 我希望 i 等于 2 的时候 ,不在 执行 下面 3,4 的打印 ,这个时候就可以 用break, 来提前跳出循环
>>> # -*- coding: utf-8 -*-
...
... for i in range(5):
...
... print(f"i = {i}")
... if i == 2:
... break
... print('hello world')
i = 0
i = 1
i = 2
hello world
break 语句 的作用 就是 提前 跳出 for 循环,然后进入for 下面的 打印 hello world 的语句。
如果 有双层for 循环 ,只会跳出 内部的for 语句
for i in range(5):
for j in range(5):
if j in {2, 4}:
break
print(f"i={i},j={j}",end=' ')
print()
结果如下:
i=0,j=0 i=0,j=1
i=1,j=0 i=1,j=1
i=2,j=0 i=2,j=1
i=3,j=0 i=3,j=1
i=4,j=0 i=4,j=1
看这里 外层循环 i 从0 -> 4 , 内层 每次j =0,1 之后 遇到2 就break出来了。
continue
continue 的继续的意思, 也是 流程控制的一个关键字,这里 提前结束 本次循环,然后 进入下次循环。
这里 当i = 2或者3 进行 下一次 循环,continue 后面的语句 在本次循环中 就不在执行 了。
>>> for i in range(5):
... if i in {2, 3}:
... continue
... print(f"i = {i}")
... print('hello world')
i = 0
i = 1
i = 4
hello world
如果这里 换成 break , 当i等于2 的时候,整个 for 循环 就结束了。
>>> for i in range(5):
... if i in {2, 3}:
... break
... print(f"i = {i}")
... print('hello world')
...
i = 0
i = 1
hello world
这就是 break与 continue 的区别 。 总结一下,break 直接跳出循环, continue 结束本次循环,并没有跳出整个循环 语句 。
猜数字游戏
咱们玩一个猜数字的游戏吧
每次要求输入一个数字, 这个数字要求 1-50 之间 ,计算机 也随机从这里 选择中一个数字,
然后 你猜一个数字
程序告诉你 大了,还是小了, 来进一步猜测,直到你猜出结果。
可以先思考一下 ,如何做? 提示 生成一个随机数, 在python 有一个内置模块 , random
# -*- coding: utf-8 -*-
from random import randrange
# 记录猜的次数
count = 0
rand_nums = randrange(0, 51)
num = int(input("请输入你要猜的数字 [0-50]: "))
while True:
if num > rand_nums:
print("猜的太大了。")
count += 1
num = int(input("请输入你要猜的数字 [0-50]: "))
elif num < rand_nums:
print('猜的太小了')
count += 1
num = int(input("请输入你要猜的数字 [0-50]: "))
else:
count += 1
print(f'恭喜你,猜对了. 你一共猜了{count} 次')
# 猜对了要终止 循环 条件
break
总结
今天 我们学习 python 中比较常见的流程控制 语句 ,for, if ,break ,continue,while 等 ,还要直到 如何判断一个 值 是否 为真值, 可以使用 bool(元素)
,学习 了 逻辑运算符,and ,or ,not 这些逻辑判断,要熟练掌握。
当掌握了这些流程控制后,我们之后就可以 写一下 代码了。加油 ,好好学。