文章目录
前言
本文主要介绍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))
# 方法一:
url_list=[]
for i in range(1,11):
url_1='http://www.boohee.com/food/group/'+str(i)
for j in range(1,11):
url_2='http://www.boohee.com/food/group/'+str(i)+'?page='+str(j)
url_list.append(url_2)
# 方法二:
url_list=[]
url_1='http://www.boohee.com/food/group/{page_1}'
url_2='http://www.boohee.com/food/group/{page_1}?page={page_2}'
for i in range(1,11):
url_1=url_1.format(page_1=i)
for j in range (1,11):
url_2_1=url_2.format(page_1=i,page_2=j) ##url_2.format()不可以等于url_2
url_list.append(url_2_1)
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 函数名(参数