目录
[1. 算数运算和关系运算](#1. 算数运算和关系运算)
[1.1. 算术运算符](#1.1. 算术运算符)
[1.2. 关系运算符](#1.2. 关系运算符)
[2.1. 赋值运算符](#2.1. 赋值运算符)
[2.2. 逻辑运算符](#2.2. 逻辑运算符)
1. 算数运算和关系运算
上一节我们学习了Python的输入输出,目前我们已经了解了Python的基础规范,接下来我们要讲一下Python的运算符 ,运算符是一些特殊的符号,通过运算符将不同的数据连接构成表达式。先通过一张图来看一下常用操作符。
我们先从算术运算符来介绍。
1.1. 算术运算符
|------|----|--------|-----------|
| 运算符 | 功能 | 输入 | 输出 |
| + | 加 | 66+22 | 88 |
| - | 减 | 66-22 | 44 |
| * | 乘 | 11*6 | 66 |
| / | 除 | 60/10 | 6 |
| % | 取余 | 10%9 | 1 |
| // | 整除 | 20//9 | 2 |
| ** | 幂 | 3**3 | 27,即三的三次方 |
这里的 '/' 和c语言的区别,一定要注意区分。
下面我们来看一个实例:
python
print("+号的功能是:66+22=",66+22)
print("-号的功能是:66-22=",66-22)
print('*号的功能是:11*66=',11*66)
print("/号的功能是:60/10=",60/10)
print('%号的功能是:30%9=',30%9)
print('//号的功能:30//9=',30//9)
print('**号的功能:2**3=',2**3)
输出结果为:
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | ``+``号的功能是:``66``+``22``=
88
``-``号的功能是:``66``-``22``=
44
``*``号的功能是:``11``*``66``=
726
``/``号的功能是:``60``/``10``=
6.0
``%``号的功能是:``30``%``9``=
3
``/``/``号的功能:``30``/``/``9``=
3
``*``*``号的功能:``2``*``*``3``=
8
|
下面给大家讲一下算术运算符的扩展功能及注意事项:
-
加法运算符'+'不仅提供加运算,还支持连接字符串的功能。
-
减法运算符'-' 不仅提供减运算,还支持取负操作。
-
乘法运算符'*'不仅提供乘运算,还支持列表的倍数添入以及字符串N个的连接。
-
除法运算符'/'在使用的过程中,必须要注意分母不能为'0',否则会出现语法错误。
这里也可以体现python语言的简便性,更加的人性化,比较亲和随意。
看下面一个例子:
python
test = 'dotcpp'
tests = '我是dotcpp'
final = test + tests#这里'+'连接了test和tests两个字符串
number = 1000
newnumber = -number#这里'-'将number取负
index = [1,2,3,4]
index = index*3
print(final)#'+'连接后的test+tests
print(newnumber)#'-'取负后的number
print(index)#'*'倍数添入后的index
输出结果:
|-------|----------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | ``dotcpp我是dotcpp
``-``1000
``[``1``, ``2``, ``3``, ``4``, ``1``, ``2``, ``3``, ``4``, ``1``, ``2``, ``3``, ``4``]
|
1.2. 关系运算符
定义:a=1,b=2
|-----|--------|-------|-------|
| 运算符 | 功能 | 输入 | 输出 |
| > | 大于 | a>b | False |
| < | 小于 | a<b | False |
| != | 不等于 | a!=b | True |
| == | 判段是否相等 | a==b | False |
| >= | 大于等于 | a>=b | False |
| <= | 小于等于 | a<=b | True |
True代表可执行接下操作,False则不可以。
简单看一下下面测试代码:
python
a = 1
b = 2
if a < b:
print('a小于b')
if a != b:
print('a不相等b')
输出结果:
|-----|----------------------|
| 1 2 | ``a小于b
``a不相等b
|
习题
1.题目 1000: [竞赛入门]简单的a+b
python
while True:
try:
a,b=map(int,input().strip().split())
print(a+b)
except:
break
"""
#input():获取用户输入的一行文本。
.strip():去除输入文本首尾的空白字符(包括空格、换行符等)。
.split():将处理过的字符串以空格为分隔符进行分割,返回一个字符串列表。
map(int, ...):将上一步得到的字符串列表中的每个元素映射为整数。
"""
2.题目 1037: [编程入门]宏定义的练习
python
a, b = map(int, input().split())
print(a % b)
3.三角形面积
python
a,b,c=map(int,input().split())
S=(a+b+c)/2
area=pow(S*(S-a)*(S-b)*(S-c),0.5)
print("%.3f"%area)
2.赋值运算和逻辑运算
2.1. 赋值运算符
赋值运算符从字面上可以理解为赋给变量一个值,通常我们用'='将右边的指赋给左边。
结构为:
变量 = 值
A = 123
下面来通过下表来看一下常用的赋值运算符。
|-------|------|-------------------|
| 运算符 | 功能 | 输入 |
| = | 赋值 | a=2 |
| -= | 减赋值 | a-=2(a=a-2) |
| += | 加赋值 | a+=2(a=a+2) |
| *= | 乘赋值 | a*=2(a=a*2) |
| /= | 除赋值 | a/=2(a=a/2) |
| %= | 取余赋值 | a%=2(a=a%2) |
| **= | 幂赋值 | a**=2(a=a**2) |
| //= | 整除赋值 | a//=2(a=a//2) |
我们通过一个实例来了解一下赋值运算符:
python
test = 66
print('将test加上88')
test += 88
print(test)
print('将结果翻10倍')
test *= 10
print(test)
print('将结果除以50')
test /= 50
print(test)
print('将结果取余5')
test %= 5
print(test)
输出结果:
|-----------------|---------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 | ``将test加上``88
``154
``将结果翻``10``倍
``1540
``将结果除以``50
``30.8
``将结果取余``5
``0.8000000000000007
|
2.2. 逻辑运算符
a=5,b=1
|-----|----|--------------------|-------|
| 运算符 | 功能 | 输入 | 输出 |
| and | 与 | a>0 and a>b | True |
| or | 或 | a>100 or a>b | True |
| not | 非 | not(a>b and a>0) | False |
同之前的例子一样,True可进入后续语句,而False不可以。
下面我们来看一段实例:
python
a=66
b=77
c=88
if c > b and c > a:#此语句意 如果c大于b 并且c大于a
print('c是最大的')
if b > a or b > c:#如果b大于a 或者 b大于c
print('b不是最小的')
if not(a > b or a > c):#如果不满足a>b或者 a<c
print('a是最小的')
输出结果为:
|-------|-----------------------------------|
| 1 2 3 | ``c是最大的
``b不是最小的
``a是最小的
|
在做算法题的时候,逻辑运算符的使用往往决定了我们做的题是否正确。
拿下面一个例子来说:
小明的爸妈对小明的零花钱管的很严,小明的学科有y和s,当小明的考试成绩两门同时取得1(分为:1,2,3三个等级,规定级别1级>2级>3级)时会获得10元零花钱,两门同时达到2级未达1时会有5元零花钱,如果有一门为1时则获得3元零花钱,如果有一门在2以下就没有零花钱可得,那么当小明y和s的成绩分别为1和3,或者2和3时,小明分别会有多少零花钱?
代码如下:
python
y = int(input())
s = int(input())
money = 0
if y == 1 and s == 1:#同时为级别1时
money += 10
elif y == 2 and s == 2:#同时为级别2时
money += 5
elif y == 1 or s == 1:#有一门以上为1时
money += 3
elif y == 3 or s == 3:#有一门以上为3时
money = 0
print('小明的零花钱:',money)
输出结果:
|-------|--------------------------------|
| 1 2 3 | ``1
``3
``小明的零花钱: ``3
|
|-------|--------------------------------|
| 1 2 3 | ``2
``3
``小明的零花钱: ``0
|
3.位运算符
位操作符 属于操作符中比较难的内容,位操作符以二进制为单位进行运算,操作的对象以及结果都是整数型。位操作符有如下几个:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右位移)和<<(左位移)。
具体说明看下表:
|------|------|--------|------------|
| 运算符 | 名称 | 例子 | 功能 |
| & | 按位与 | A&B | A和B进行位与运算 |
| | | 按位或 | A|B | A和B进行位或运算 |
| ~ | 按位取反 | ~A | A进行取反运算 |
| ^ | 按位异或 | A^B | A和B进行位异或运算 |
| >> | 右位移 | A>>c | A右移c位 |
| << | 左位移 | A<<c | A左移c位 |
依此介绍一下各种位运算。
1)位与运算(A&B)
位与运算中,A和B按位进行与运算,当每位对应全是1的时候对应结果位1,反之为0
|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
可以看出,当10111001&00100011得到00100011。当对应位同时为1才为1。
2)位或运算(A|B)
|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
可以看出,当10110010 | 01011110得到11111110,对应位置存在一个1的时候即为1。
3)异或位运算(A^B)
|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
可以看出,10110010^01011110得到11101100,对应位置相反的时候,即0对应1,1对应0的时候得到1。
4)按位取反运算(~A)
|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
按位取反的过程中需要运用补码运算,即0补为1,1补为0。
5)左右位移
右移时,(第一行为移动前,第二行为移动后)
|---|---|---|---|---|---|---|---|---|
| | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
| | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
右边最低位为溢出位被丢弃,在填充左侧最高位时,如果最高位是0,则填0,如果最高位是1,则填1。右移相当于除上2的n次方。
左移时, (第一行为移动前,第二行为移动后)
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
| | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
左边最高位为溢出位被丢弃,在最右边空位补0,左移相当于乘上2的n次方。
这章内容带领大家深入了解计算机世界的0和1,可以选择性去掌握了解,最后来介绍一下运算符的优先级,在算法运算时遇到操作符优先级问题的时候可以参考此表格。
|------|---------------------|
| 由低到高 | <、>、<=、>=、!=、== |
| 由低到高 | | |
| 由低到高 | ^ |
| 由低到高 | & |
| 由低到高 | <<、>> |
| 由低到高 | +、- |
| 由低到高 | *、/、%、// |
| 由低到高 | ~、+、- |
| 由低到高 | ** |