if语句
“世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离”
格式:
if condition1 :
执行语句1
elif condition2 :
执行语句2
elif ..:
...
else :
执行语句n
注意:
关于条件condition:必须是表达式,值为true和false,可以使用操作运算符。
条件condition里也可以使用 and 和or操作,只要condition最终返回布尔值就行。
通常我们并不为最后一个else写条件,即写成elif。因为最后一个else就是在所有已知条件不满足的情况下才执行的。
if语句可以嵌套使用,对条件做进一步的判断。
if 表达式1:
语句
if 表达式2:
语句
elif 表达式3:
语句
else:
语句
elif 表达式4:
语句
else:
语句
例如:判断一个数能被2整除,也能被3整除
num = 6
if num%2 ==0 :
print('我能被2整除‘)
if num %3 == 0 :
print('我能被3整除')
else :
print('我不能被2整除qwq')
match...case
Python 3.10 增加了 match...case 的条件判断,不需要再使用一连串的 if-else 来判断了。
match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。
格式如下:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
案例:判断今天星期几
def judgeWeek(week):
match week:
case 1:
return '星期一'
case 2:
return '星期二'
case 3:
return '星期三'....
case _:
return 'error'week=int(input('请输入今天星期几,1-7'))
judgeWeek(week)
注意:
case 后面的匹配条件可以是多个,用|隔开,例如:
...
case 3|5|7:
return '奇数'
...
一定要在case的执行语句里加return,否则一直向下执行,直到遇到case _。
虽然比if...else..简洁,但可能由于忘记return导致程序结果错误。
推荐
小白入门技术的友好网站:
Python3 条件控制 | 菜鸟教程 (runoob.com)
查看http相关信息:
418 I'm a teapot - HTTP | MDN (mozilla.org)
随堂练习
Problem01 【A.Output Letter Grade by Score】
题目描述
请编写一个程序,提示用户输入一个分数,并将分数转换为一个字母等级(A
、B
、C
),并在屏幕上输出相应的消息,当分数超出正常范围(<0||>100)时,应输出error
输入格式
一个整数,表示用户的分数。
输出格式
一个字符,表示用户的等级,A
、B
、C
当输入超出范围(<0||>100)时 输出 error
样例输入-1
93
Copy
样例输出-1
A
Copy
样例输入-2
103
Copy
样例输出-2
error
Copy
提示
以下是各等级的分数对应表:
字母等级 | 分数区间 |
---|---|
A | 80~100 |
B | 60~79 |
C | 0~59 |
思路
1.使用if ...elif ...else的条件判断语句
2.分数区间作为条件,可以用操作运算符>= 和<=以及 and 实现
技术细节
- 条件conditon: Rane_Of_Start<=score and score <=Range_Of_End。
- 条件后面紧跟冒号,注意缩进,缩进表示层级关系。
代码实现
x1 = int(input())
if x1>=80 and x1<=100:
print('A')
elif x1<=79 and x1>=6:
print('B')
elif x1>=0 and x1<=59:
print('C')
else:
print('error')
Problem02 【B.getinRange】
题目描述
输入3个整数——xx,bound1bound1和bound2bound2,其中bound1bound1不一定小于bound2bound2。如果xx在两个边界之间,则输出xx。否则,如果xx小于下限,则输出下限,或者如果xx大于上限,则输出上限。
输入格式
输入三个正整数,分别表示xx,bounda1bounda1和bound2bound2,以,
隔开。
输出格式
如果xx在两个边界之间,则输出xx。否则,如果xx小于下限,则输出下限,或者如果xx大于上限,则输出上限。
样例输入-1
1,3,5
Copy
样例输出-1
3
Copy
样例输入-2
4,3,5
Copy
样例输出-2
4
思路
1.先找到bound1,bound2中的最大值和最小值。
2.拿出x与最大值和最小值比较,决定输出谁。
技术细节
- 使用min(a,b)和max(a,b)函数求bound1,bound2中的最大最小值。
- 当x>max_value,打印最大值;当x<min_value,打印最小值。
代码实现
import ast
x, bound1, bound2 = ast.literal_eval(input())
high_bound=max(bound1,bound2)
low_bound=min(bound1,bound2)
# 现在程序中有三个变量 x, bound1, bound2
# 在这行注释下面,编写代码,输出你的答案
if(low_bound<=x and x<=high_bound):
print(x)
elif x>=high_bound:
print(high_bound)
else:
print(low_bound)
Problem03 【C.Is Point Inside Square】
题目描述
有一个正方形,四个角的坐标 (x,y)(x,y) 分别是 (1,−1)(1,−1)、(1,1)(1,1)、(−1,−1)(−1,−1)、(−1,1)(−1,1),xx 是横轴,yy 是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。
输入格式
输入一行,包括两个整数 x,yx,y,以一个,
分开,表示坐标 (x,y)(x,y)。
输出格式
输出一行,如果点在正方形内,则输出 True
,否则输出 False
。
输入样例-1
1,1
Copy
输出样例-1
True
思路
1.将坐标(x,y)拆分成x轴和y轴上的两个点。
2.分别判断在x轴和y轴上是否点都落在正方形的线段内。
3.若x轴y轴都在,则在正方形内,反之,不在。
技术细节
- 定义方法judgeX(x)和judgeY(y)分别用来判断x点,y点是否在正方形边框上。
- 函数的返回值为True或False
- 当-1<=x and x<=1成立,返回True,否则返回False;y点同理。
- 调用两个方法,如果都返回True,说明(x,y)落在正方形内。
- 方法返回是否为True,可以用judgeX(x) and judgeY(y)表达式表示。
代码实现
import ast
n, m=ast.literal_eval(input())
# 现在程序中有两个变量n, m
# 在这行注释下面,编写代码,输出你的答案
def judgeX(x):
if -1<=x and x<=1 :
return True
else:
return False
def judgeY(y):
if -1<=y and y<=1:
return True
else:
return False
print(judgeX(n) and judgeY(m))
Problem04 【D.Check Leap Year】
题目描述
输入一个年份,判断这一年是否是闰年,如果是输出 True
,否则输出 False
。
输入格式
输入一个正整数 x
,表示年份。
输出格式
输出一行。如果输入的年份是闰年则输出 True
,否则输出 False
。
样例输入-1
1944
Copy
样例输出-1
True
Copy
样例输入-2
1900
Copy
样例输出-2
False
Copy
提示
闰年:
- 四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。
- 每四百年再一闰:如果year能够被400整除,则year是闰年。
数据保证,1582≤n≤20201582≤n≤2020 且年份为自然数。
思路
1.拿到年份根据判断闰年的规则判断平闰年即可。
2.如果year能够被4整除,但是不能被100整除,或者能够被400整除则为闰年。
技术细节
-
为闰年的条件:(x%4==0 and x%100!=0) or x%400==0
- 注意:两个条件是or的关系,它俩满足任何一个都是闰年。
代码实现
x = int(input())
# 现在程序中有一个变量x
# 在这行注释下面,编写代码,输出你的答案
if (x%4==0 and x%100!=0) or x%400==0:
print(True)
else:
print(False)
Problem05 【F.Days in Month】
题目描述
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。
输入格式
输入两个正整数,分别表示年份 yy 和月数 mm,以,
隔开。
输出格式
输出一行一个正整数,表示这个月有多少天。
样例输入-1
1926,8
Copy
样例输出-1
31
Copy
样例输入-2
2000,2
Copy
样例输出-2
29
Copy
提示
数据保证 1583≤y≤20201583≤y≤2020,1≤m≤121≤m≤12。你可以借鉴Check Leap Year
中的闰年判断方法。
思路
1.先判断平闰年,参考第四题。
2.创建一个月份数组,存每月的天数。
3.如果是闰年,且是二月就在天数后面+1;
4.其余月份,平年和闰年相同,从月份数组直接取即可。
技术细节
- 创建月份数组
arr=[31,28,31,30,31,30,31,31,30,31,30,31] #记录平年的每月天数
- 访问指定月份的天数
arr[m-1] 注意:索引从0开始,故真实的月份-1就得到数组中月份对应的天数。
- 判断闰年且是二月的条件 judgeYear(y) and m==2
代码实现
import ast
y, m=ast.literal_eval(input())
# 现在程序中有两个变量y, m
# 在这行注释下面,编写代码,输出你的答案
# 平年与闰年区别:闰年有366天,比平年多一天,多在二月,闰年二月有29天
#判断闰年:能被四整除但不能被100整除 或者能被400整除
def judgeYear(year):
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
return True
else:
return False
arr=[31,28,31,30,31,30,31,31,30,31,30,31] #记录平年的每月天数
if judgeYear(y) and m==2: #表示是闰年并且是二月的话
print(arr[m-1]+1)
else:
print(arr[m-1])