python的运算符和表达式

基本概念

运算符:根据特定的算法对操作数执行运算, 并返回计算结果的符号

操作数:参与运算的对象

表达式:计算的式子

 1.算术运算

+      针对数字:加法。针对字符串:连接。针对复合型数据:合并。

-   减

*     针对数字:乘 。针对字符串:连接。

**    幂

/  除(结果为浮点数)

//    求余取整(向下取整)

%   取模,返回除法的余数

  • 注意

1./   //    %  右侧的操作数不能为0

2.+ *   针对不同类型的值,会执行不同的运算

3.浮点数运算的精度问题

①可以采用round()四舍五入法

②使用decimal()

  • 小练习

计算100以内的偶数和

sum = 0
for i in range(101):
    if i % 2 == 0:
        sum = sum +i
print(sum)

  • 案例:设计一个简单的四则运算器
#定义一个无限循环
while True:
    n1 = int(input("输入n1的值:"))
    #输入运算符
    o = input("请输入[+ - * /]: ")
    n2 = int(input("输入n2的值: "))
    #定义字典,不同的运算符,不同的计算方法
    d = {
        '+' : n1+n2,
        '-' : n1-n2,
        '*' : n1*n2,
        '/' : n1/n2
    }
    #输出结果,使用get方法读取字典的操作符
    result = d.get(o,"运算符有误")
    #打印结果,以整数的形式打印结果
    print("result: %d"%result)
    #输出空行
    print()
    c = input("您是否继续?y/n: ")
    if c == 'y':
        print()
        continue
    elif c == 'n':
        break
    else:
        print("您输入有误")

2.赋值运算

语法

左值(参数、变量、对象的属性、对象的元素)= 表达式

形式

简单的赋值  =

附加操作赋值  +=(先相加后赋值)、-=、*=、/=、%=、//=、**=

 3.比较运算

比较运算也称关系运算,有两个操作数

 大小比较(数)

比较大小关系的两个操作数必须是类型相同的。如果是数字直接比较大小,如果是字符,第一个相同比较第二个。返回的结果为True或者False

小练:输入三个整数,比较数的大小,找出最大的数
x = int(input("请输入x: "))
y = int(input("请输入y: "))
z = int(input("请输入z: "))
if x > y and x > z :
    print("最大的数是x值为: %d"%x)
elif y>x:
    print("最大的数是y值为: %d" % y)
else:
    print("最大的数是z值为: %d" %z)

小练:输入三个数,将这三个数进行排序
x = int(input("请输入x: "))
y = int(input("请输入y: "))
z = int(input("请输入z: "))
if x > y :
    t = x
    x = y
    y = t
if x>z:
    t = x
    x = z
    z = t
if  y>z:
    t = y
    y = z
    z = t
print("请输出三个的大小: %d %d %d"%(x,y,z))

 比较字符串的大小

如果区分大小写,小写一般大于大写。如果不区分大小写,建议使用upper()或lower()方法把字符串同一转换为大写或小写。

小练:输入三个字符串,比较字符串的大小
x = input("输入第一个字符串值为:")
y = input("输入第二个字符串值为:")
z = input("输入第三个字符串值为:")
print(x)
print(y)
print(z)
if x > y :
    #利用数组交换两个字符串
    x,y=y,x
elif x > z :
    x,z=z,x
if y > z:
    y,z=z,y
print(x)
print(y)
print(z)

相等比较

两个操作数不限制类型,如果类型不相同,则不相等,直接返回False。如果类型相同,在比较是否相同,如果相同则返回True.

小练:根据成绩单,输出平均分,输出最高分以及最高分学生名单,输出优秀学生名单
#通过字典定义成绩单
d={
    "王五":89,
    "李四":56,
    "张三":66,
    "胡六":85
}
sum = 0
max = 0
max_name = " "
print("优秀学生名单:")
for i in d :
    sum += d[i]
    if d[i] >= 85:
        #输出优秀学生的名单和成绩,名单是字符串表示,成绩是(两位浮点数表示)
        print("  %s(%.2f)"%(i,d[i]))
    if d[i] > max :
        max = d[i]
        max_name = i
print()
#输出平均成绩,成绩是(两位浮点数表示)
print("平均分成绩:%.2f"%(sum/len(d)))
#输出最高分的分数和名单,分数是两位浮点数表示,名单是字符串形式输出
print("最高分成绩:%.2f(%s)"%(d[i],i))

4.逻辑运算

逻辑运算又称布尔代数,就是布尔值的算术运算,包含逻辑与(and)逻辑或(or)逻辑非(not)

1.逻辑与运算

 and是AND的布尔操作,当两个操作数都为True时,才返回True.

逻辑与是短路逻辑,左侧表达式为False,结果返回Fase.

操作数可以是任意类型的表达式,最后返回的结果为运算值,而不是布尔值

小练习:

学校招特长生,设定三个标准:

1.钢琴在九级或以上,并且计算机在四级或以上,直接通过

2.文化课非常优秀,钢琴在五级或以上,并且计算机在二级或以上直接通过

3.文化课及格,钢琴在七级或以上,并且计算机在三级或以上直接通过

id = int(input("考生号(2024001~2024999):"))
whk = float(input("文化课成绩: "))
gq = int(input("钢琴级数(1~10):"))
jsj= int(input("计算机级数(1~6): "))
if id >2024000 and 20241000:
    if (gq >= 9 and jsj >= 4) or (whk >= 90 and gq >= 5 and jsj >= 2) or (whk >= 60 and gq >= 7 and jsj >= 3):
        print("恭喜你,被录取了!")
    else:
        print("很遗憾,没有被录取!")
else:
    print("考号输入有误,请重新输入!")

2.逻辑或运算

 or是OR的布尔操作,当两个操作数只有一个为True时,就返回True.

逻辑或是短路逻辑,左侧表达式为True,直接返回结果,右侧表达式不需要进行计算.

操作数可以是任意类型的表达式,最后返回的结果为运算值,而不是布尔值

小练习:

设置用户管理模块,对身份进行鉴别

id = int(input("请输入你的级别(1~10):"))
s = (
    id ==1 and ["游客"] or
    id ==2 and ["普通会员"] or
    id ==3 and ["高级会员"] or
    id ==4 and ["管理员"] or
    ["无效输入"]
)[0]
print(s)

3.逻辑非

not是布尔取反操作

只有一个操作数,把操作数转换为布尔值,取反并输出结果

两次逻辑非运算等于把操作数转换为布尔值

逻辑非运算的返回值一定是布尔值

5.位运算

位运算是对二进制数进行逐位运算

逻辑位运算:位与(&)、位或(|)、位异或(^)、位非(~)

移位运算:左移(<<)、右移(>>)

逻辑位运算:
1.位于运算(&)

对二进制操作数的逐位进行计算

两个数结果都为一,则为一,否则为零

2.位或运算(|)

两个数位都为零才为零,否则为一

3.位异或运算(^)

两个数相同返回零,不同返回一

4.位非运算(~)

对二进制数进行取反操作

例如:12= 0b1100    在前面补充零,前面为零是正数,为一是负数

~0b1100 = 0b10011 (-13) 

移位运算:
1.<<运算

将二进制数整体向左移几位,符号位保持不变,右侧空出的位置,自动填零,如果超出32位,自动放弃。

2.>>运算

将二进制数整体向右移动几位,有符号,左侧空出位置自动补充

6.其他运算

成员运算

in       not  in  适用于字符串、列表、元组

小练习:

检测用户输入的数字是否在指定的列表,如果不在,则添加在列表,已经存在不添加。

l = [1,2,3,4,5,6,7,8,9]
while True:
    n = int(input("输入一个数字: "))
    if n in l:
        print("数字已存在")
    else:
        l.append(n)
        print("输入的数字已经被添加到列表")
    print("是否继续输入?y/n")
    ok = input()
    if ok == "y" :
        continue
    elif ok == "n" :
        print("l")
        break
    else :
        print("输入有误")

身份运算

is   is not

is  是比较两个对象是否相同(内存地址)

==  是比较两个对象是否相等(对象的值和类型是否相等)

id()  可以获取对象的内存地址,is  比较俩个对象的内存地址是否相同

对于可变数据,列表、字典、集合,即使值相同,也是不同的对象。

对于不变数据,值相同,则他们是相同的对象,如数字、字符串、元组。

7.表达式

定义表达式

简单的表达式:一个值或者一个变量

复杂的表达式:由简单的表达式组成,复杂的表达式可以嵌套成更复杂的表达式

表达式的运算:从内到外,依次上移

表达式的运算顺序:从左到右,可以使用小括号改变运算顺序

运算符的优先级

()、【】、{}

x[index]、x[index:index]、()、x.attr   

 ##下标索引、切片、调用函数、对象的属性

await  

**

~

* /  %  //  @

+ - 

>>   <<

&

|

^

in  not in   is   is  not  <  < =  >  >=

!=   ==

not 

and

 or

if 

lambda

条件表达式
a,b = 1,2
if a>b :
    c = a
else:
    c = b
1.使用逻辑与和逻辑或的方式进行运算
a,b = 1,2
c = (a>b and [a] or [b])[0]
2.利用表结构来设计

[False表达式,True表达式][条件表达式]

当条件表达式为True,转换为1,读取第二个元素

当条件表达式为False,转换为0,读取第一个元素

a,b = 1,2
c = [b,a][a>b]
3.条件表达式运算符(推荐)

True 表达式   if条件表达式   else  False表达式

a,b = 1,2
c = a if a>b else b

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值