python流程控制
1、条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断,在Python程序中,用if语句实现。
比如,输入用户年龄,根据年龄打印不同的内容
age = 20 if age >= 18: print("your age is ",age)
根据Python的缩进规则,如果 if 语句判断是 True,就把缩进的 print 语句执行了,否则,什么也不做。
也可以给 if 添加一个 else 语句,意思是,如果 if 判断是False,不要执行if的内容,去把else执行了:
age = 3 if age >= 18: print('your age is', age) else: print('your age is', age)
注意不要少写了冒号 : 。
当然上面的判断是很粗略的,完全可以用elif做更细致的判断:
age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
elif 是else if 的缩写,完全可以有多个elif,所以if语句的完整形式就是:
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
if 语句执行有个特点,它是从上往下判断,如果在某个判断上是 True,把该判断对应的语句执行后,就忽略掉剩下的 elif 和 else .
if判断条件还可以简写,比如写:
if x: print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False
再议 input
最后看一个有问题的条件判断。很多同学会用input()读取用户的输入,这样可以自己输入,程序运行得更有意思:
count = int(input("Plz input your math record:")) if count >= 90: print('你的成绩是 A') elif count >= 80: print('你的成绩是 B') elif count >= 70: print('你的成绩是 C') elif count >= 60: print('你的成绩是 D') else: print('No pass !!!')
如果执行后报如下错误 TypeError: unorderable types: str() > int() 这是因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数int类型上例中已经完成转换
2、循环语句
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name) 执行这段代码,会依次打印names的每一个元素: Michael Bob Tracy 所以for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句
比如我们想计算1-10的整数之和,可以用一个sum变量做累加:
sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)
如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数:
>>> list(range(5))
[0, 1, 2, 3, 4]
range(101)就可以生成0-100的整数序列,计算如下:
sum = 0 for x in range(101): sum = sum + x print(sum)
请自行运行上述代码,看看结果是不是当年高斯同学心算出的5050。
使用for循环来访问list :
i = 0 for m in range(1,100,2): #代表从1到100,间隔2(不包含100) print(format(i ,'2d'),m) #print(i,m) i = i + 1 else: print('out',m)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现
sum = 0 n = 99 while n > 0: print('sum num:',sum) sum = sum + n print('n num:',n) n = n - 2 print('sum total:',sum)
在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。
break
在循环中,break语句可以提前退出循环。例如,本来要循环打印1~100的数字:
n = 1 while n <= 100: print(n) n = n + 1 print('END')
上面的代码可以打印出1~100。
如果要提前结束循环,可以用break语句:
n = 1 while n <= 100: if n > 10: # 当n = 11时,条件满足,执行break语句 break # break语句会结束当前循环 print(n) n = n + 1 print('END')
执行上面的代码可以看到,打印出1~10后,紧接着打印END,程序结束。
可见break的作用是提前结束循环。
n = 1 while n < 10: print(n) n = n + 2
continue
在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。
n = 0 while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶数,执行continue语句 continue # continue语句会直接继续下一轮循环,if判断语句中后续的print()语句不会执行 print(n)
执行上面的代码可以看到,打印的不再是1~10,而是1,3,5,7,9。
可见continue的作用是提前结束本轮循环,并直接开始下一轮循环。
小结
循环是让计算机做重复任务的有效的方法。
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。
编写登陆接口:
1.输入用户名密码
2.认证成功后显示欢迎信息
3.输错三次后锁定
#!/usr/bin/env python #coding:utf-8 count = 0 while True: user = input("请输入用户名:").strip() if len(user) == 0: print("\033[31;1m用户名为空,请重新输入\033[0m") continue elif user != "saneri": print("\033[32;1m用户名不存在,请重新输入\033[0m") continue while count < 3: if user == "saneri": pwd = input("请输入密码:").strip() if pwd == 'abcd123': print("欢迎 %s 登陆" % user) else: print("\033[34;1m请重新输入密码!!!\033[0m") count += 1 else: print("\033[33;1m你已经超过三次输入,账户已锁定!!!\033[0m") break
实例2,判断年龄,猜错三次退出。
#!/usr/bin/env python #coding:utf-8 age = 30 count = 0 while count <3: guess_age = int(input("guess_age:")) if guess_age == age: print("yes, you got it.") break elif guess_age > age: print("think smaller...") else: print("think bigger!") count += 1 else: print("you have tried too many times...")
3、求输入数字平均值.
#!/usr/bin/env python
#coding:utf-8
''' 求输入数字平均值程序,退出是按'q'键即可,平均值 = 数字总和 / 次数 total 为输入数字总和,Frequency为输入数字的次数, ''' total = 0 Frequency = 0 user_input = input(f"请输入数字(完成所有数字输入后,请输入q终止程序!):") while user_input != "q": num = float(user_input) total += num # 等价于 total = total + num Frequency += 1 # 等价于 Frequency = Frequency + 1 user_input = input(f"请输入数字(完成所有数字输入后,请输入q终止程序.)") if Frequency == 0: result = 0 else: result = total / Frequency print("你输入的数字平均值为" + str(result))

浙公网安备 33010602011771号