slogan: 我学编程就是为了赚钱,后来发现它不只是能赚钱…
1.分支结构
if语句的使用
在Python中,要构造分支结构可以使用if
、elif
和else
关键字。(elif
是 else if
的缩写,但Python里规定只能这样写) 下面的例子中演示了如何构造一个分支结构。
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
说明: if 条件中的
and
是逻辑运算符,同样用法的有not
、or
,对应我们学过的数学知识,分别表示 且、非、或。
和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,所以说在Python里,缩进使用时强制的。
如果if
条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格,一般使用制表键tab
一步到位,但也有制表键在编辑器里默认不是表示4个空格,需要注意一下。
如果要构造出更多的分支,可以使用if...elif...else...
结构或者嵌套的if...else...
结构,下面利用多分支结构实现分段函数求值。
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
说明:
input()
返回的数据类型是str
,str
不能直接和整数比较,必须先把str转换成整数,所以有用到数据类型转换int(input())
。同理float(input())
也是如此。
当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if
的内部构造出一个新的分支结构,同理elif
和else
中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
说明: 对比两次代码,嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,所以能使用扁平化的结构时就不要使用嵌套。
注: if 语句不能为空,但是如果出于某种原因写了无内容的 if 语句,可以使用 pass 语句来避免报错。
a = 66
b = 200
if b > a:
pass
2.循环结构
循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in
循环,一种是while
循环。
2.1 for-in循环
如果明确的知道循环执行的次数或者要对一个容器进行迭代,那么我们一般使用for-in
循环,例如下面代码中计算1~100求和的结果(
∑
n
=
1
100
n
\displaystyle \sum \limits_{n=1}^{100}n
n=1∑100n)。
sum = 0
for x in range(1, 101):
sum += x
print(sum)
上面代码中的range()
函数是Python的一个内置函数,可以用来构造一个从参数 1 到参数 100 的范围,当我们把这样一个范围放到for-in
循环中,就可以通过前面的循环变量x
依次取出从1到100的整数。当然,range
的用法非常灵活,下面给出了一个例子:
range(101)
:可以用来产生0到100范围的整数,需要注意的是取不到101。range(1, 101)
:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。range(1, 101, 2)
:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。range(100, 0, -2)
:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
2.2 while循环
如果要构造不知道具体循环次数的循环结构,我们一般使用while
循环。while
循环通过一个能够产生或转换出bool
值的表达式来控制循环,表达式的值为True
则继续循环;表达式的值为False
则结束循环。
下面通过使用while
循环实现一个“猜数字”的小游戏。猜数字游戏的规则是:计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
import random #导入random模块,用来调用内置函数random()
answer = random.randint(1, 100) #生成一个1-100的随机整数数
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
上面的代码中使用了break
关键字来提前终止循环,需要注意的是break
只能终止它所在的那个循环,这一点在使用嵌套的循环结构需要引起注意。除了break
之外,还有另一个关键字是continue
,它可以用来停止本次循环后续的代码直接让循环进入下一轮。
注: Python中的random模块
- random.random(): 函数会生成一个随机的浮点数,范围是在0.0~1.0之间
- random.uniform(a, b): 函数随机生成一个处于范围[a,b]的浮点数
- random.randint(a, b): 随机生成一个范围[a, b]内的整数(int类型)
- random.choice(): 可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
- random.shuffle: 如果你想将一个序列(不包括元祖和字符串)中的元素,随机打乱的话可以用这个函数方法
- random.sample(a, b): 从序列a中随机且独立的截取指定长度b的片段。
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面通过嵌套的循环来输出一个九九乘法表。
for i in range(1, 10):
for j in range(1, i + 1):
print('%d*%d=%d' % (i, j, i * j), end='\t')
print()