第七课提纲
一、条件表达式 | 关系运算符 | > < |
逻辑运算符 | 与或非 | |
二、选择结构 | 单分支 | |
双分支结构 | if与else的双分支结构 | |
三元运算符的分支语句 | ||
多分支选择结构 | ||
选择嵌套结构 | ||
三、循环结构 | for 与 while 循环 | 应用举例 |
break 与continue | ||
四、案例分析 | 循环while的应用 | 计算平均分 |
分支if的应用 | 计算一年的第几天 | |
快速筛选素数 |
一、条件表达式
1.关系运算符
>>> print(1<2>3)False>>> print(1<3>2)True>>> if a=3: #条件表达式不允许使用赋值运算符SyntaxError: invalid syntax>>> 1>2>xxx #上下文不存在xxxFalse>>>
2.逻辑运算符
与关系运算符类似,逻辑运算符and和or具有短路求值或惰性求值的特点,可能不会对所有的表达式进行求值,而是只计算必须计算的表达式的值。以and为例,对于表达式“表达式1 and表达式2”来说,如果表达式1的值为false,则不论表达式2是什么,都不会被计算。在设计包含多个条件的条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件根据and和or运算符的短路求值特性来组织顺序,可以提高程序运行效率。>>> 3 and 55>>> 3 or 53>>> 0 and 50>>> not 3False>>> not 0True
下面的函数使用指定的分隔符把多个字符串连接成一个字符串,如果用户没有指定分隔符则使用逗号。
图1 逻辑运算符or的使用
输出结果为:
'1:2:3:4:5'
二、选择结构
1.单分支
单分支的表达式注意冒号和四个空格的缩进:#if 表达式:#语句
>>> x=input('please input two numbers:')please input two numbers:2 6>>> a,b=map(int,x.split())>>> if a>b:a,b=b,a>>> print(a,b)2 6
在python中,代码的缩进非常重要,缩进是体现代码逻辑关系的重要方式,同一个代码块必须保证相同的缩进量。在实际的开发中,只要遵循一定的约定,python代码的排版是可以降低要求的。例如下面,虽然不建议这样写,但是也是可以执行的:
>>> if 3>2:print('ok')#语句较短,可以直接卸载分支语句的后面ok>>> if True:print(3);print(5)#在一行写多个语句,使用分号分隔35
2.双分支结构
①if与else的双分支结构
语法为:
#if 表达式:#语句1#else:#语句2
图2 鸡兔同笼问题
>>>请输入鸡兔总数和腿的总数:5 16鸡:2,兔:3>>> ================================ RESTART ================================>>>请输入鸡兔总数和腿的总数:4 16鸡:0,兔:4>>> ================================ RESTART ================================>>>请输入鸡兔总数和腿的总数:5 17数据不正确,无解>>>
【知识点8】 ② 三元运算符的分支语句 |
Python提供了一个三元运算符,并且在三元运算符构成的表达式中还可以嵌套三元运算符,可以实现与选择结构相似的效果。
|
图3 三元运算符的应用
3.多分支选择结构
语法表示为:
#if 表达式1:#语句1#elif表达式2:#语句2#elif表达式3:#语句3#…#Else:#语句n
def func(score): if score >100 or score<0: return 'wrong score.must between 0 and 100.' elif score >=90: return 'A' elif score>=80: return 'B' elif score >=70: return 'C' elif score >=60: return 'D' else: return 'E'
4.选择嵌套结构
语句如下
#if 表达式1:#语句1#if 表达式2:#语句2#else:#语句3#else:#if 表达式4:#语句4
还是前面的百分之转换等级abcde的代码,可以如下编写:
def func(score): degree='DCBAAE' if score>100 or score<0: return 'wrong score.must between 0 and 100.' else: index=(score-60)//10 if index >=0: return degree[index] else: return degree[-1]
三、循环结构
1.for 与 while 循环
这两个语句的含义和别的编译语言相同,在此只举案例。下面是用循环结构遍历并输出列表中的所有元素:图4 循环for的应用
下面是用来输出1-100能被7整除但不能同时被5整除的所有整数:
图5 循环for的应用
下面是用嵌套的循环结构打印九九乘法表:
图6 双重循环的应用
下面使用带有else子句的循环结构来计算1+2+3+4……+100的结果:图7 for与else一起使用
下面是while 语句实现了同样的功能
图8 while语句的使用
使用内置函数sum也可以实现相同的功能:
>>>sum(range(1,101))5050
2.break 与continue
break | 一旦被执行,将使得break语句所属层次的循环提前结束 |
continue | 提前结束本次循环,忽略continue之后的所有语句,提前进入下一次循环 |
四、案例分析
1.输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩,回答yes就继续输入下一个成绩,回答no就停止输入成绩。
numbers=[]while True: x=input('请输入一个成绩:') try: numbers.append(float(x)) except: print('不是合法的成绩')while True: flag=input('继续输入吗(yes/no)').lower() if flag not in ('yes','no'): print('只能输入yes或no') else: break if flag=='no': break print(sum(numbers)/len(numbers))>>>请输入一个成绩:1继续输入吗(yes/no)yes请输入一个成绩:5继续输入吗(yes/no)yes请输入一个成绩:3继续输入吗(yes/no)no3.0>>>
2.编写程序,判断今天是今年的第几天
import timedate=time.localtime()year,month ,day=date[:3]day_month=[31,28,31,30,31,30,31,31,30,31,30,31]if year%400==0 or(year%4==0 and year%100!=0): day_month[1]=29if month ==1: print(day)else: print(sum(day_month[:month-1])+day)
3.如何快速判断一个数字是否是素数?
n=input('input an integer:')n=int(n)if n==2: print('Yes')elif n%2==0: print('No')#偶数必然不是素数else:#大于5的素数必然出现的6的倍数的两侧#因为6x+2,6x+3,6x+4肯定不是素数,假设x为大于1的自然数 m=n%6if m!=1 and m!=5: print('No')else: for i in range(3,int(n**0.5)+1,2): if n%i==0: print('No') break print('Yes')