上一篇文章讲了Python初体验,了解了Python的历史、优缺点、未来发展前景,带大家初步了解了一下Python,之后学习了Python中的语言元素——变量和运算符。经过简单的练习,相信大家也基本掌握了这两个元素。我们昨天写的代码都是一条一条执行,我们称之为顺序结构,但是就如同我们的人生不可能是一帆风顺,总会遇到人生的岔路口,需要我们做出自己的选择。同样在编程语言中计算机也需要做出选择。
一、分支结构(选择结构)
比如我们在登录某一账号时,系统需要将我们输入的账号和密码同时和系统中已保存的账号和密码进行比对,如果账号和密码同时通过,那么我们登陆成功,否则提示登录失败,请重新输入。这里就会产生两条分支,这两条分支只有一条会被执行,我们将这种结构称为分支结构,也叫选择结构。在Python中,要构造分支结构可以使用if 、elif 和else 关键字。
基本结构为:
if ? ? 条件: ? ? ? 条件成立执行的代码块 ? ? ? … elif ? ? 条件: ? ? ? 条件成立执行的代码块 ? ? ? … else: ? ? ? …
这里我们需要注意的是,条件后一定要加“ : ”,条件成立执行的代码块前要打四个空格。不同于C++、Java等编程语言,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,条件成立执行的代码只需要保持相同的缩进就可以了,缩进可以任何数量空格,但是我们一般使用四个空格。
1.分支结构初体验
下面举一个例子:
import getpass
username = input('用户名:')
password = getpass.getpass('密码:')
if username == 'admin' and password == '123456':
print('登陆成功,欢迎您!')
print('客服热线:400-500-8820')
else:
print('登录失败,用户名或密码错误')
print('程序结束,下次见')
在这个程序中,首先让用户输入用户名和密码,如果用户名和密码同时符合条件,则执行登录成功的代码块,否则执行登录失败的代码块,不管是否登陆成功,都会执行程序结束,下次见的代码。
2.分支结构练习
1. 下面我们使用分支结构来求一个分段函数的值
f
(
x
)
=
{
???
3
x
?
5
,
x
>
1
???
x
+
2
,
1
>
=
x
>
=
?
1
???
5
x
+
3
,
x
<
?
1
f(x)= \begin{cases} \ \ \ 3x - 5,&x > 1\\ \ \ \ x + 2 ,& 1>=x >= -1\\ \ \ \ 5x + 3,&x < -1 \end{cases}
f(x)=?????????3x?5,???x+2,???5x+3,?x>11>=x>=?1x<?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'f(x) = {y:.2f}')
我们让用户输入一个数字,然后判断这个数字的范围,这个范围就是分支结构的条件,如果第一个条件不满足就进行第二个条件判断,若前两个条件都不满足,则不用判断第三次,直接运行第三个条件下的代码块。
2. 输入本月总收入,输入本月五险一金扣除金额,计算出应缴税款和税后收入
代码如下:
total = float(input('本月收入:'))
insurance = float(input('五险一金缴纳额:'))
E = total - insurance
I = E - 3500
if I <= 0:
A = E
if 1500 > I >= 0:
T = I * 0.03
A = E - T
if 4500 > I >= 1500:
T = I * 0.1 - 105
A = E - T
if 9000 > I >= 4500:
T = I * 0.2 - 555
A = E - T
if 35000 > I >= 9000:
T = I * 0.25 - 1005
A = E - T
if 55000 > I >= 35000:
T = I * 0.3 - 2755
A = E - T
if 80000 > I >= 55000:
T = I * 0.35 - 5505
A = E - T
if I >= 80000:
T = I * 0.45 - 13505
A = E - T
print(f'您应该缴纳税款:{T}元,您的税后收入为:{A:.2f}')
让用户输入本月收入和五险一金应缴纳金额后,计算出扣除五险一金后的工资 E ,再算出减去个税起征点3500后的 I ,通过判断 I 所在的范围,计算出缴纳税款和税后收入。
二、循环结构
如果我们要实现每隔1秒中在屏幕上打印一次“hello, world”并持续打印一个小时,我们肯定不能够直接把print('hello, world') 这句代码写3600遍,这里就需要循环结构。循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in 循环,一种是while 循环。
1.for-in 循环
基本结构
for ? 临时变量 ? in? 序列: ? ? ? ? 重复执行代码 ? ? ? ? …
如果明确地知道循环执行的次数,我们推荐使用for-in 循环,例如计算1到100的和。 被for-in 循环控制的语句块也是通过缩进的方式来确定的,这一点跟分支结构完全相同,大家看看下面的代码就明白了。
total = 0
for A in range(1, 101):
total = total + A
print(total)
range(101) :可以用来产生0到100范围的整数,需要注意的是取不到101。range(1, 101) :可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。range(1, 101, 2) :可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。range(100, 0, -2) :可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
我们首先将1-100的总和赋予初始值0,写出for-in 循环结构,这里临时变量可以根据变量定义规则随便定义一个,range表示A的取值范围是1-100的整数。每次在取值范围中依次取出一个数,并将total的值刷新,total的值等于前一次循环后的total值加上本次取出的A的值,并输出最后一次total值。 知道这一点后我们可以进一步算出1-100之间偶数的总和。
total = 0
for A in range(2, 101,2):
total = total + A
print(total)
这个方法只是改变取值的步长,也就是第二次取的值在前一次取值上加2。当然我们也可以融入分支结构来进行计算这个问题。
total = 0
for A in range(1,101):
if A % 2 == 0:
total = tatal + A
print(total)
2.for-in 循环练习
1. 输入一个非负整数N,计算N!
total = 1
X = int(input('请输入一个非负整数:'))
for A in range(X, 1, -1):
total *= A
print(total)
这道题和上面1-100求和的方式一样,只是累加改为累乘
2. 输入两个正整数,找出它们的最大公约数
a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
if a > b:
a, b = b, a
for i in range(a, 0, -1):
if b % i == 0 and a % i == 0:
print(f'最大公约数为:{i}')
break
公约数就是能同时整除几个整数的数。输入两个数后,我们将更小的一个数作为取值范围,因为更小的数肯定不能被整除。所以将a 赋为更小值,从a开始向0取值,如果遇到可以同时整除a, b的数,那么终止循环,这个数就是最大公约数。
3.while 循环
如果要构造不知道具体循环次数的循环结构,我们推荐使用while 循环。while 循环通过一个能够产生或转换出bool 值的表达式来控制循环,表达式的值为True 则继续循环;表达式的值为False 则结束循环。
基本结构
while ? ? 执行条件: ? ? ? ? 条件成立执行的代码 ? ? ? ? 条件成立执行的代码
下面我们通过一个“计算三角形面积”的小游戏来看看如何使用while 循环。规则是输入三角形三条边的长度,如果能构成三角形就计算周长和面积,如果不能构成三角形,提示用户重新输入,直到正确。
while True:
a = float(input('a = '))
b = float(input('b = '))
c = float(input('b = '))
if a + b > c and a + c > b and b + c > a:
p = a + b + c
half = p / 2
area = (half * (half - a) * (half - b) * (half - c)) ** 0.5
print(f'三角形周长为{p}')
print(f'三角形面积为{area:.2f}')
break
else:
print('不能构成三角形,请重新输入')
首先我们while后的循环条件设为True,此时该循环将会是一个死循环,如果没有break等跳出循环的条件话,该循环将会一直循环。首先让用户输入三个数字,判断该三条边能否组成三角形,如果能组成三角形,则输出周长和面积,并跳出死循环,否则重复循环。
同时我们也能使用while 循环进行知道循环次数的计算。我们还是通过计算1-100的总和来看看while 循环的使用
total = 0
counter = 1
while counter < 101:
total += counter
counter += 1
print(total)
counter计数器初始值为1,每循环一次,counter加1。当counter小于101时,总数等于上一次循环完后的总数加上本次counter数。直至循环结束,输出total。
4. break和continue
上面的代码中使用while True 构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这也就是常说的“死循环”。为了在用户猜中数字时能够退出循环结构,我们使用了break 关键字,它的作用是提前结束循环。需要注意的是,break 只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,下面的例子我们会讲到什么是嵌套的循环结构。除了break 之外,还有另一个关键字是continue ,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。
5. while 循环练习
1.计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),玩家只有7次机会,若7次机会后玩家还没有猜出,直接给出正确答案
import random
i = 0
answer = random.randrange(1, 101)
while True:
i += 1
num = int(input('请输入一个整数:'))
if num < answer:
print('大一点')
elif num > answer:
print('小一点')
else:
print('您猜对了')
break
if i == 7:
print(f'智商不足请充值,正确数字为:{answer}')
break
这道题由于不知道玩家具体几次会猜出数字,所以使用一个死循环进行。玩家输入一次数字后,计数器加一,达到7次后结束循环并提示正确数字。若玩家在7次以内输入数字,则给出对应提示。
6. 嵌套的循环结构
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个乘法口诀表(九九表)。
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}*{j}={i * j}', end='\t')
print()
很显然,在上面的代码中,外层循环用来控制一共会产生9行的输出,而内层循环用来控制每一行会输出多少列。内层循环中的输出就是九九表一行中的所有列,所以在内层循环完成时,有一个print() 来实现换行输出的效果。
以上就是Python学习第二天,Get It!
|