
实用Python程序设计MOOC-第二章基本运算、条件分支和输出格式控制
[TOC]
实用Python程序设计MOOC-第二章基本运算、条件分支和输出格式控制
算术运算、逻辑运算和分支语句
算术运算符
+
加法-
减法(双操作数),取相反数(单操作数)*
乘法/
除法,结果是小数。即便能整除也是小数。%
取模(求余数)//
求商,结果是整数**
求幂
算术表达式
1 | a=(3+2)*(6-3) / 2 |
算术表达式
/
计算的结果都是小数,哪怕能整除
1 | z=10/2 |
- 有小数的算术表达式,结果就是小数
1 | z=10.0-10 |
- 算术运算符优先级
第一级: **
第二级: *///%
第三级: +-
可以用( )
指定计算顺序: (3+4)*(1+2)
记不得优先级就用( )
- 算术运算的同时赋值
+=
:a+=b等价于a=a+b-=
:a-=b 等价于a=a-b*=
:…/=
:…%=
:…//=
:…**=
:…
1 | a=6 |
- 常见问题或注意事项
数学上的运算符号或代数式写法,不是拿到程序里就能直接用的!
比如|x| 在程序里并不能求x的绝对值,而是没定义,会出错!
2(x+3) (4+x)这样的表达式也不能在程序里写!
应该写:2*(x+3)*(4+x)
乘法就一定要用*
/的结果一定是小数。一个算术表达式,只要有一个操作数是小数,其结果就一定是小数。
如果x是小数print(x)就会打出小数形式,哪怕x = 4/2。如果题目要求是整数,就要注意了,不要把整数当小数打出来。
print(4/2)打出2. 0
/是÷不是分数线
a/b*c
是a÷b×c
,不是a/(b*c)
关系运算符和booI类型
- 六种关系运算符用于数值的比较
相等 ==
不等 !=
大于 >
小于 <
大于等于 >=
小于等于 <=
- 比较的结果是bool类型,成立则为True,反之为False
- bool类型数据只有两种取值,True或False
1 | print(3<5) #>>True |
- 关系运算符也能比较字符串(按字典序,大小写相关)
1 | a="k" |
逻辑运算符和逻辑表达式
逻辑运算符用于表达式的逻辑操作,有and or not 三种,操作的结果是True或False
与:exp1 and exp2
当且仅当exp1和exp2的值都为True(或相当于True)时,结果为True(或相当于True)
1 | n = 4 |
- 什么相当于True或False
●0
,""
(空字符串),[]
(空表)都相当于False (但除0以外都不等于False)
●非0的数,非空的字符串和非空列表,都相当于True (但除1以外,都不等于True)
●True 可以看作1,False 可以看作0
1 | True == 1 #True |
或:exp1 or exp2
当且仅当exp1和exp2的值都为False(或相当于False) 时,结果为False(或相当于False)
1 | n = 4 |
非:not exp
exp值为True (或相当于True)时,结果为False (或相当于False)
exp值为False (或相当于False)时,结果为True (或相当于True)
1 | not 4 < 5 #False |
- 逻辑运算符的优先级
not > and > or
1 | print(3 < 4 or 4 > 5 and 1 > 2) #>>True |
逻辑表达式是短路计算的,即对逻辑表达式的计算,在整个表达式的值已经能够断
定的时候即会停止
exp1 and exp2
:如果已经算出表达式exp1为假,那么整个表达式的值肯定为假,于是表达式exp2就不需要再计算
exp1 or exp2
:如果已经算出exp1为真,那么整个表达式必定为真,于是exp2也不必计算
- 各种运算符的优先级
从高到低
1 | ●算术运算符 ** * / // % + - |
1 | print( [] == False) #>>false |
条件分支语句(if语句)
有时,并非所有的程序语句都要被顺序执行到,会希望满足某种条件就执行这部分语句,满足另一条件就执行另一部分语句。这就需要“条件分支语句”
1 | if 逻辑表达式1: |
依次计算逻辑表达式1、逻辑表达式2…只要碰到一个表达式i为真,则执行语句组i( 前面为假的表达式对应的语句组不会被执行) ,且后面的表达式不再计算,后面的语句组也都不会被执行。
若所有表达式都为假,则执行语句组n+1
注意,缩进的前一行末尾有:
- 可以没有elif, 也可以没有else, 也可以都没有
1 | if表达式1: |
1 | if 表达式1: |
1 | if 表达式1: |
1 | if 表达式1: |
- Python程序的语句前面不能加空格或制表符,除非:
- 它在if语句中的某个”语句组”里面
- 在for,while….等语句的语句组里面
- 在函数体里面
if缩进对齐
- if语句中的语句组,每条语句左边必须缩进,且缩进情况必须一样(对齐)
1 | if int (input()) == 5: |
输入: 5,输出: ab
输入: 4,无输出
1 | if int (input()) == 5: |
输入: 4,输出:b
1 | if int (input()) == 5: |
出错!没有对齐的缩进!
- 什么相当于True或False
1 | if "ok": |
if语句嵌套
- 在一条if语句的某个分支(语句组)里,还可以再写if语句。
1 | a = int(input()) |
输入:4,输出: bad
输入:3,输出: good
输入:-1,无输出
1 | a = int(input()) |
输入:4,无输出
输入:3,输出: good
输入:-1,无输出
if语句实例
- 例:输入密码
1 | password = "python" |
- if语句实例:温度转换程序
1 | tmpStr = input("请输入带有符号的温度值:") #tmpStr是变量名,随便取啥都行 |
请输入带有符号的温度值:45F
转换后的温度是7.22222222222222C
请输入带有符号的温度值:8.2C
转换后的温度是46.76F
字符串切片
若s是一个字符串,则:s[x:y]
是s的从下标x到下标y的左边那个字符构成的子串(切片)
1 | print ("12345"[1:3]) #>>23 |
常见错误
不要把if …eIse或if…elif…else 写成多个if
1 | if a > 5: |
1 | if a > 5: |
两段代码不一样
…中可能把a的值改成了<= 5。写多个if,哪些代码会被执行,哪些不会被执行,很容易搞错。
例题:请写一个程序,该程序输入一个年份,根据该年份是否是建国整十周年、建党整十周年以及是否是闰年给出不同的输出。
1 | year = int (input()) |
1 | -2 |
输出格式控制
- 字符串中的格式控制符:
%s
表示此处要输出一个字符串%d
表示此处要输出一个整数%f
表示此处要输出一个小数%.nf
表示此处要输出一个小数, 保留小数点后面n位,四舍六入,五则可能入也可能舍。
格式控制符只能出现在字符串中!
1 | h = 1.746 |
1 | My name is tom, I am 1.75m tall. |
1 | name = "tom" |
- 题目:在一行输入两个小数x,y,请输出(x+y) * x的值,保留小数点后面5位
错误解法:
1 | s = input().split() |
x+y本来就是小数没有必要先转成字符串,又转成小数。结果要保留小数点后面5位,并非中间的计算过程也要保留小数点后面5位