文章目录
- 前言
 - 一、条件语句
 - 
   
- 1、if 语句
 - 2、else 语句
 - 3、elif 语句
 - 4、条件嵌套
 - 练习题
 
 - 二、循环语句
 - 
   
- 1、for循环
 - 2、while循环
 - 3、循环中的break/continue和else、pass
 - 
     
- break
 - continue
 - else
 - pass
 
 - 4、循环与递归
 - 练习题
 
 - 三、python函数
 - 
   
- 1、自定义函数
 - 2、lambda函数(匿名函数)
 - 3、常用标准库函数
 - 
     
- math模块
 - os模块
 - random模块
 - datetime模块
 - 
       
- datetime模块下的date类
 - datetime模块下的time类
 - datetime模块下datetime类
 
 
 - 练习题
 
 - 四、python异常处理
 - 
   
- 1、try-except
 - 
     
- 练习题
 
 - 2、raise
 
 
前言
本文主要介绍python选择结构语句—if条件语句、控制结构语句—循环语句的使用、python函数(自定义函数、匿名函数、常用标准库函数)、python异常处理(try-except、raise)。
一、条件语句
1、if 语句
语法:
if expression:
    expr_true_suite
 
expression (条件表达式):
- 比较运算符
 - 成员运算符
 - 逻辑运算符
 
expr_true_suite
- expression条件为True时执行的代码块
 - 代码块必须缩进(通常为4个空格)
 

示例:
a=3
if a==3:
	print("yes!")
 
2、else 语句
语法:
if expression:
	expr_true_suite
else:
	expr_false_suite
 
expr_false_suite
- expression 条件为False时执行的代码块
 - 代码块必须缩进
 - else语句不缩进
 

 示例:
a=100
if a>100:
	print(a-10)
else:
	print(a+10)
 
3、elif 语句
语法:
if expression:
	expr_true_suite
elif expression2:
	expr2_true_suite
...
...
elif expressionN:
	exprN_true_suite
else:
	none_of_the_above_suite
 
expr2_true_suite
- expression2为True时执行的代码块
 exprN_true_suite
- expressionN为True时执行的代码块
 else
- none_of_the_above_suite是以上所有条件不满足时执行的代码块
 
示例:
k=input("input the index of shape:")
if k=="1":
	print("circle")
elif k=="2":
	print("oval")
elif k=="3":
	print("rectangle")
elif k=="4":
	print("triangle")
else:
	print("you input the invalid number")
 
4、条件嵌套
语法:
if expression:
	expr_true_suite
elif expression2:
	expr2_true_suite
	if expression2_1:
		expr2_1_true_suite
	else:
		expr2_1_false_suite
...
...
elif expressionN:
	exprN_true_suite
else:
	none_of_the_above_suite
 
示例:
k=input("input the index of shape:")
if k=="1":
	print("circle")
elif k=="2":
	print("oval")
elif k=="3":
	sd1=int(input())
	sd2=int(input())
	if sd1==sd2:
		print("the square's area is",sd1*sd2)
	else:
		print("the rectangle area is",sd1*sd2)	
elif k=="4":
	print("triangle")
else:
	print("you input the invalid number")
 
练习题
题目1:
编写一个输入分数,输出分数等级的程序,具体为:
Score
Grade
90~100 A
70~89 B
60-69 C
0-59 D
othersInvalid score
请添加必要的输入输出语句,尽量让程序友好
score = eval(input("请输入你的分数:"))
if score >= 90 and score <= 100:
	print("你的成绩等级是A")
elif score >= 70 and score < 90:
	print("你的成绩等级是B")
elif score >=60 and score < 70:
	print("你的成绩等级是C")
elif score >=0 and score < 60:
	print("你的成绩等级是D")
else:
	print("othersInvalid score")
 
题目2:
编写程序,从键盘输入一个一元二次方程ax^2+bx+C=0的三个参数a、b、c(a、b和c均为整数,且a不等于0) ,求此方程的实根。如果方程有实根,则输出实根(保留一位小数),如果没有实根则输出没有实根的信息
[输入样例1]
1,0,-1
[输出样例1]
x1 = 1.0, x2 = -1.0
[输入样例2]
1,2,1
[输出样例2]
x=-1.0
[输入样例3]
2.2.3
[输出样例3]
no real solution
#b^2-4ac>0:有两个不相等的实根
#b^2-4ac=0:有且仅有一个实根
#b^2-4ac<0:没有实根
import math
a,b,c = eval(input("请输入a,b,c值:"))
x = b**2-4*a*c
if x > 0:
	x1 = (-b+math.sqrt(x))/(2*a)
	x2 = (-b-(math.sqrt(x))/(2*a))
	print("x1=",x1,"x2=",x2)
elif x == 0:
	x1 = (-b)/(2*a)
	print("x1=",x1)
else:
	print("no real solution")
 
题目3:
请分别用if-elif-else结构和嵌套的if结构实现符号函数 (sign function) ,符号函数的定义为:
#方法一:if-elif-else结构
x = eval(input("请输入一个数字:"))
if x > 0:
	sgn = 1
elif x < 0:
	sgn = -1
else:
	sgn = 0
print('sgn = {:.0f}'.format(sgn))
#方法二:嵌套的if结构
x=eval(input("请输入一个数字:"))
if x != 0:
	if x<0:
		sgn = -1
	else:
		sgn = 1
else:
	sgn = 0
print('sgn = {:.0f}'.format(sgn))
 
- eval 作用是将字符串当成有效的表达式来求值并返回计算结果。
 
二、循环语句
1、for循环
语法:
for iter_var in iterable_object:
	suite_to_repea
 
iterable_object
- String
 - List
 - Tuple
 - Dictionary
 - File
 
可以明确循环次数
- 遍历一个数据集内的成员
 - 在列表解析中使用
 - 生成器表达式中使用
 
示例:
for i in range(2,12,2):
	print(i,end=' ')
s="hello"
for i in s:
	print(i,end=' ')
for i in range(len(s)):
	print(s[i],end=' ')
 
range()函数
常常在与for循环一起使用。
语法:
range(start,end,step=1) :不包括end值
range(start,end) :缺省step值为1
range(end) :缺省start值为0,缺省step值为1
参数:
start:起始值(包含)
end:终值(不包含)
step:步长(不能为0)
返回:
产生一系列整数,返回一个range对象。
示例:
list(range(3,12,2))
list(range(3,12))
list(range(12))
 
2、while循环
语法:
while expression:
	suite_to_repeat
 
expression
- 条件表达式
 - 当expression值为True时执行suite_to_repeat代码块
 
示例:
sumA=0
j=1
while j<10:
	sumA+=j
	j+=1
sumA
 
总结: for与while选择
| for循环 | while循环 | |
|---|---|---|
| 循环次数明确 | ✔ | |
| 循环次数不明确 | ✔ | |
| 把一件事情重复N遍 | ✔ | ✔ | 
3、循环中的break/continue和else、pass
【注】:Tab键和空格键不能同时混用
break
break语句:终止当前循环,转而执行循环之后的语句。
- for 循环与break
 
语法:
# break语句搭配for循环
for ... in ...:
	...
	if ...:
		break
 
示例1:
for i in range(5):
	print("轻舟已过万重山")
	if i==3: 
		break #结束循环
 
本来会循环5次,但循环到第4次时就被break语句打断。
示例2:输出2-100之间的素数。
from math import sqrt
for i in range(2,101):
	flag=1
	k=int(sqrt(i))
	for j in range(2,k+1):
		if i%j == 0:
			flag=0
			break
	if (flag):
		print(i,end=' ')
 
- while循环和break
 
语法:
# break语句搭配while循环
while ...(条件):
	...
	if ...:
		break
 
示例1:
while True:
	print("轻舟已过万重山")
	t=input("诗句的作者是谁?")
	if t == "李白":
		break
print("李白——《早发白帝城》")
 
示例2:输出2-100之间的素数。
from math import sqrt
j=2
while j<100:
	i=2
	k=sqrt(j)
	while i <= k:
		if j % i == 0:
			break
		i+=1
	if i>k:
		print(j,end=' ')
	j+=1
 
continue
continue语句:停止当前循环,重新进入循环(!!! 一定要注意,在循环中执行continue语句接下来的语句后面的不会执行。)
- for循环则判断迭代是否已经结束
 - while循环则判断 循环条件是否满足
 
- for循环与continue
 
语法:
for ... in ...:
	...
	if ...:
		continue
	...
 

示例1:
for i in range(5):
	print("轻舟已过万重山")
	if i == 3:
		continue
	print("李白——《早发白帝城》")
 
当i==3时会触发continue语句,于是回到了循环开头,跳过了一句print语句。
示例2:
sumA=0 
i =1
for i in range(1,6) :
 	sumA+=i
 	if i==3:
 		continue
 	print("i={},sum={}".format(i,sumA))
 
- while循环与continue
 
语法:
while ...(条件):
	...
	if ...:
		continue
	...
 

 示例1:
while True:
	q1=input("轻舟已过万重山来源于哪首诗?")
	if q1 != "早发白帝城":
		continue
	print("答对了,下面是第二问")
	q2=input("这首诗的作者是谁?")
	if q2 != "李白":
		continue
	print("答对了,下面是第三问")
	q3=input("李白最终的下场是怎么样的?")
	if q3 == "不知道":
		break
print("恭喜你都答对了。")	
 
如果q1错,q1对q2错,q1和q2对q3错,都会返回第一个问题重新循环,直到q3答对,才结束循环。
示例2:
sumA=0 
i =1
while i<=5:
 	sumA+=i
 	i+=1
 	if i==3:
 		continue
 	print("i={},sum={}".format(i,sumA))
 
else
循环中的else,else不但可以和if配合使用,还能跟for循环和while循环配合使用。
- 如果循环代码从break处终止,跳出循环。
 - 正常结束循环,则执行else中代码。
 
- for循环与else
 
示例:
for i in range(5):
	num=int(input("Please enter a number:"))
	if num == 0 :
		print("你触发了break语句,循环结束,导致else语句不会生效")
		break 
else:
	print("5次循环你都错过了,else语句生效了。")
 
- while循环与else
 
示例:
from math import sqrt
num=int(input("Please enter a number:"))
j=2
while j<int(sqrt(num)):
	if num %j ==0:
		print("{:d} is not a prime.".format(num))
		break
	j+=1
else:
	print("{:d} is not a prime.".format(num))
 
pass
pass 语句:跳过
示例:
num=int(input("Please enter a number:"))
if num>100:
	pass
else:
	print(num)
 
总结:
| 语句 | 说明 | 
|---|---|
| break语句 | 从循环中跳出(必须和if语句连用) | 
| continue语句 | 跳跃到循环开头(必须和if语句连用) | 
| pass语句 | 什么都不做(常用在if语句下) | 
| else语句 | 用在循环语句后,如果正常结束循环就执行else语句(没有遇到break) | 
4、循环与递归
示例:斐波那契数列
0,1,1,2,3,5,8…
规律:从第三位数开始,是前两位数的和。
循环表示:
def fib(n):
	a,b = 0,1
	count = 1
	while count < n :
		a,b = b,a+b
		count = count+1
	print(b)
 
递归表示:
def fib(n):
	if n == 0 or n == 1:
		return n 
	else:
		return fib(n-1)+fib(n-2)
 

示例2:模拟3的个数乘法。
def f1(a,b):
    if b==1:
        return a 
    else:
        return a+f1(a,b-1)
f1(3,5)
# 输出:
# 15
 
3+f(3,4)
3+3+f(3,3)
3+3+3+f(3,2)
3+3+3+3+f(3,1)
示例3:十进制表示为二进制的表示方法。
def f2(n):
    if n>=2:
        f2(n//2)
    print(n%2,end='')
f2(8)
 
练习题
题目1:
输入一个整数,求其逆序数。注:虽然可通过字符串切片等方法轻获得一个数的逆序数,但用整数通过循环来获得逆序数是锻炼逻思维的一好例子。
方法一:字符串切片。
str_int=eval(input("请输入一个整数"))
list_int=list(str_int)
if list_int[0] >= list_int[1]:
	new_int=list_int[0]+list_int[1]
else:
	new_int=list_int[1]+list_int[0]
for i in range(2,len(list_int)):
	for j in new_int:
		if list_int[i]>j:			
			new_int.split('j')[0]+list_int[i]+j+new_int.split('j')[1]
		else:
			new_int+i
print(new_int)	
 
方法二:用整数通过循环来获得逆序数。
n=eval(input("请输入一个整数"))
s=0
m=n
while n != 0:
	s= s * 10 + n % 10
	n=n // 10
print("reversed({:d}) = {:d}",format(m,s))
 
题目2:
将一个正整数分解质因数。例如: 输入90打印出90=2*3*3*5。
n=int(input("请输入一个正整数:"))
print(n,'=',end='') #这个循环是怎么弄的?
i=2
while n != 1:
	if n % i ==0:
		n //=i
		if n ==1:
			print('{:d}'.format(i))
		else:
			print('{:d} *'.format(i),end =' ')
	else:
		i +=1
 
三、python函数
1、自定义函数
- 定义函数:def()语句
 
语法:
def 函数名(参数1,参数2,.....,参数n): 
	函数体 	
	return 语句
 
示例:
def hello(name):
	print(name+"Good morning!"
                



















