Chapter4笔记- 条件 Conditional【DataWhale夏令营 聪明学Python】

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】

题目描述

请编写一个程序,提示用户输入一个分数,并将分数转换为一个字母等级(ABC),并在屏幕上输出相应的消息,当分数超出正常范围(<0||>100)时,应输出error

输入格式

一个整数,表示用户的分数。

输出格式

一个字符,表示用户的等级,ABC 当输入超出范围(<0||>100)时 输出 error

样例输入-1

93

Copy

样例输出-1

A

Copy

样例输入-2

103

Copy

样例输出-2

error

Copy

提示

以下是各等级的分数对应表:

字母等级分数区间
A80~100
B60~79
C0~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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值