[基本运算符、流程控制之if判断、与用户交互]

基本运算符

1、算数运算符

python支持的算术运算符与数学上计算的符号使用是一致的

  1. salary = 3.3
  2. res = salary * 12
  3. print(10 + 1) # 加法
  4. print(10 - 3) # 减法
  5. print(10 * 3) # 乘法
  6. print(10 / 3) # 除法,得到的返回值会保留整数与小数部分
  7. print(10 // 3) # 取整除,得到的返回值只保留整数部分(地板除)
  8. print(10 % 3) # 取余数,相除后只返回余数
  9. print(10 ** 3) # 幂,10的3次方
  10. print(10 + 3.1)
  11. print(10 % 3)
  12. # ps:整型和浮点型可以混着计算<数字类型>

2、比较运算符

比较运算用来对两个值进行比较,返回的是布尔值True或False

== 等于,两个对象相等返回True,否则返回False

!= 感叹号等于,两个对象相等返回False,否则返回True

> 大于

>= 大于等于

< 小于

<= 小于等于

  1. x = 10
  2. y = 10.0
  3. print(x == y) #整型和浮点型比较
  4. # True
  5. m = 10 # 整型
  6. n = "10" # 字符串类型
  7. print(m == n) #仅限同类型
  8. # False
  9. print(10 == [1,2,3]) # == 不限类型
  10. # False
  11. print(10 + [1,2,3]) # 报错
  12. print(10 == [1,2,3])
  13. # False
  14. print(10 != [1,2,3])
  15. # True
  16. print(10 > 3.1)
  17. print(10 >= 3.1)
  18. print(10 <= 3.1)
  19. print(10 < 3.1)

3、赋值运算符

python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、

解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简

增量赋值

= 简单赋值运算

+= 加法赋值运算

-= 减法赋值运算

*= 乘法赋值运算

/= 除法赋值运算

//= 取整赋值运算

%= 取余赋值运算

**= 幂赋值运算

  1. age = 18 # 简单赋值运算
  2. age += 10 # age = age + 10 # 加法赋值运算
  3. print(age)
  4. # 28
  5. age *= 10 # 乘法赋值运算
  6. print(age)
  7. # 180
  8. age %= 3 # age = age % 3 # 取余赋值运算
  9. print(age
  10. # 0
链式赋值

如果我们想把同一个值同时赋值给多个变量名,可以这么做

  1. x = 10
  2. y=x
  3. z=y

链式赋值指的是可以用一行代码搞定这件事

  1. x=y=z=10
  2. print(x,y,z)
  3. print(id(x),id(y),id(z))
交叉赋值

我们定义两个变量m与n

如果我们将m与n的值交换过来

  1. m=10
  2. n=20
  3. temp=n
  4. n=m
  5. m=temp
  6. m,n=n,m
  7. print(m,n)

交叉赋值指的是一行代码可以搞定这件事

解压赋值

如果我们想把列表中的多个值取出来一次赋值给多个变量名,可以这么做

  1. salaries=[11,22,33,44,55,66,77]
  2. mon1=salaries[0]
  3. mon2=salaries[1]
  4. mon3=salaries[2]
  5. mon4=salaries[3]
  6. mon5=salaries[4]
  7. mon6=salaries[5]
  8. mon7=salaries[6]
  9. mon1,mon2,mon3,mon4,mon5,mon6,mon7=salaries
  10. # 变量名变少了
  11. mon1,mon2,mon3,mon4,mon5,mon6,=salaries # 错误
  12. # 变量名变多了
  13. mon1,mon2,mon3,mon4,mon5,mon6,mon7,mon8=salaries # 错误
  14. # 如果只想取头尾的几个值,可以用*_匹配
  15. mon1,mon2,mon3,*_=salaries
  16. print(mon1)
  17. print(mon2)
  18. print(mon3)
  19. print(_)
  20. # 取倒数两个值
  21. *_,last2,last1=salaries
  22. print(last1)
  23. print(last2)
  24. print(_)
  25. # 取前一个以及后两个值
  26. mon1,*_,last2,last1=salaries
  27. print(mon1)
  28. print(last1)
  29. print(last2)
  30. # 如果想取中间的值,*加middle
  31. _,*middle,_=salaries
  32. print(middle)
  33. print(_)
  34. # _同样的数值代替以最新的冲掉原值,所以_显示的是77

4、逻辑运算符

逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False

  • not: 将紧跟其后的那个条件取反,not优先级最高
    1. print(not 10 > 3)
    2. # False
  • or: 连接左右两个条件,但凡有一个条件为True,最终结果就为True

    1. print("egon" == "egon" or 10 > 3)
    2. # Ture
    3. print("egon" == "Egon" or 10 > 3)
    4. # Ture
  • 优先级:not>and>or

  • ① 三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
    1. 3>4 and 4>3 or not 1 == 3 and 'x' == 'x' or 3 >3
    2. print(3>4 and 4>3 or not 1==3 and 'x' == 'x' or 3 >3)
    3. (3>4 and 4>3) or (not 1==3 and 'x' == 'x') or 3 >3
    4. # True

    ② 最好使用括号来区别优先级,其实意义与上面一样

    原理为:

    (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割

    (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可

    (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运

    1. print(1 != 1 or 3 > 4 and not "xx" == "egon" or 1 > 10 and 9 > 3 and 1 > 0)
    2. 1 != 1 or (3 > 4 and not "xx" == "egon") or ((1 > 10 and 9 > 3) and 1 > 0)
    3. # False
  • ③ 短路运算:偷懒原则(能少算就尽量少算)

逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回

  1. print(1 > 0 and 1 != 1 and 3 > 2)
  2. # False
  3. print(1 > 0 or 1 != 1 or 3 > 2)
  4. # True

补充了解:布尔值分为两大类

1、显式的布尔值:能明确地得到True或False,比如x=True,10 > 3, 10 > 3 and 1==1

例如:

  1. 3 == 1 and True and 10 > 3
  2. print(3 == 1 and True and 10 > 3)
  3. # False

2、隐式的布尔值:所有的数据类型的值都可以当作隐式的布尔值,其中0、None、空、对应

隐式布尔值为False,其余对应隐式布尔值为True

  1. 10 and 3 and 4 > 2
  2. print(10 and 3 and 4 > 2)
  3. # True
  4. print(10 and 0 and 4 > 2)
  5. # 0
  6. print(0 and 2 or 1)
  7. # 1

流程控制之if判断

流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为

三种结构:顺序结构之前我们写的代码都是顺序结构)、分支结构(用到if判断)、

循环结构(用到while与for)

1、什么是判断

判断 条件:

符合条件做xxx

否则:

做yyy

2、为何要判断

为了让计算机像人一样根据条件的判断结果去做不同的事情

3、用if关键字来实现分支结构,如何用:完整语法

  1. print("start...")
  2. if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,代码3
  3. 代码1
  4. 代码2
  5. 代码3
  6. elif 条件2: # 如果条件2的结果为True,就依次执行:代码1、代码2,代码3
  7. 代码1
  8. 代码2
  9. 代码3
  10. elif 条件3: # 如果条件3的结果为True,就依次执行:代码1、代码2,代码3,......
  11. 代码1
  12. 代码2
  13. 代码3
  14. ......
  15. else: #其它情况,就依次执行:代码1,代码2,代码3
  16. 代码1
  17. 代码2
  18. 代码3
  19. print("end...")

注意:

1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行

2、条件可以是任意表达式,但执行结果必须为布尔类型 在if判断中所有的数据类型也都会自动转换

成布尔类型

2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False

2.2、其余均为True

1、单分支

  1. print("start...")
  2. if 条件1:
  3. 代码1
  4. 代码2
  5. 代码3
  6. print("end...")
  7. 案例:
  8. print("start...")
  9. inp_name = "egon"
  10. inp_pwd = "456"
  11. db_name = "egon"
  12. db_pwd = "456"
  13. if inp_name == db_name and inp_pwd == db_pwd:
  14. print("用户登录成功")
  15. print("end...")

2、双分支

  1. print("start...")
  2. if 条件1:
  3. 代码1
  4. 代码2
  5. 代码3
  6. else:
  7. 代码1
  8. 代码2
  9. 代码3
  10. print("end...")
  11. 案例:
  12. print("start...")
  13. inp_name = "xxx"
  14. inp_pwd = "456"
  15. db_name = "egon"
  16. db_pwd = "456"
  17. if inp_name == db_name and inp_pwd == db_pwd:
  18. print("用户登录成功")
  19. else:
  20. print("账号或密码输入错误")
  21. print("end...")

3、多分支

  1. print("start...")
  2. if 条件1:
  3. 代码1
  4. 代码2
  5. 代码3
  6. elif 条件2:
  7. 代码1
  8. 代码2
  9. 代码3
  10. elif 条件3:
  11. 代码1
  12. 代码2
  13. 代码3
  14. print("end...")
  15. # 如果:成绩>=90,那么:优秀
  16. # 如果成绩>=80且<90,那么:良好
  17. # 如果成绩>=70且<80,那么:普通
  18. # 其他情况:很差
  19. # 案例:
  20. score = 83
  21. if score >= 90:
  22. print("优秀")
  23. elif score >= 80:
  24. print("良好")
  25. elif score >= 70:
  26. print("普通")
  27. else:
  28. print("很差")

与用户交互

1、接收用户输入

  1. inp_name = input("请输入您的用户名:")
  2. inp_name = "123"
  3. print(inp_name,type(inp_name))
  4. # 案例1:
  5. print("start...")
  6. inp_name = input("请输入您的用户名:") # inp_name = "egon"
  7. inp_pwd = input("请输入您的密码:") # inp_pwd = "123"
  8. db_name = "egon"
  9. db_pwd = 456
  10. f inp_name == db_name and inp_pwd == db_pwd:
  11. print("用户登录成功")
  12. else:
  13. print("账号或密码输入错误")
  14. print("end...")
  15. # 案例2:
  16. score = 83
  17. score = input("请输入您的成绩:") # score = "83"
  18. score = int(score) # 将纯数字组成的字符串转成整型
  19. if score >= 90: # "83" >= 90
  20. print("优秀")
  21. elif score >= 80:
  22. print("良好")
  23. elif score >= 70:
  24. print("普通")
  25. else:
  26. print("很差")
  27. # python2的raw_input() 等同于python3的input

2、格式化输出

  1. print("1111",end='')
  2. print("2222")
  3. name = input("your name: ")
  4. age = input("your age: ")
  5. print("my name is %s my age is %s" % (name,age))
  6. print("my name is %s my age is %d" % ("egon",19))
  7. print("my name is %s my age is %d" % ("egon","19")) # %d 只能接收数字
  8. print("my name is %s my age is %s" % ("egon",[1,2,3]))
  • 浅拷贝

针对于可变对象,浅拷贝的时候会开辟一块内存空间,仅仅是最顶层开辟了,里层元素的地址是相同的。

针对于不可变对象,浅拷贝的时候仅仅是拷贝了引用,并不会开辟新的内存空间

浅拷贝之后,改变拷贝之后的对象中的不可变对象,并不会影响原始对象中的元素,但是,如果改变拷贝之后的对象中的可变对象,会同时影响原始对象中的元素。

  • 深拷贝

深拷贝除了顶层拷贝以外,还对子元素进行了拷贝,本质就是递归浅拷贝。

  1. import copy
  2. lis = ['Tim Cook', '50', ['basketball', 'football']]
  3. # 浅拷贝
  4. # new_lis = copy.copy(lis)
  5. # new_lis[-1].append('music')
  6. # print(f'原列表:{lis}')
  7. # print(f'浅拷贝列表:{new_lis}')
  8. '''
  9. 运行结果:
  10. 原列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
  11. 浅拷贝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
  12. '''
  13. # 深拷贝
  14. new_lis_2 = copy.deepcopy(lis)
  15. new_lis_2[-1].append('music')
  16. print(f'原列表:{lis}')
  17. print(f'深拷贝列表:{new_lis_2}')
  18. '''
  19. 运行结果:
  20. 原列表:['Tim Cook', '50', ['basketball', 'football']]
  21. 深拷贝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]

[基本运算符、流程控制之if判断、与用户交互、深浅拷贝]的更多相关文章

  1. 基础运算符补充,流程控制之if判断/while循环

    常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...

  2. 格式化输出的三种方式,运算符及流程控制之if判断

    ''' 格式化输出的三种方式,运算符及流程控制之if判断 ''' # 格式化输出的三种方式 # 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄 ...

  3. python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法

    基本运算符 运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运 ...

  4. <基础> PHP 运算符 流程控制

    PHP运算符优先级: 递增/递减 (++ / --) > 算术运算符(+ .- .* ./) > 大小比较 > 逻辑与 (&)> 逻辑或(||) > 三目 > ...

  5. day04 运算符 流程控制 (if while/of)

    1. 运算符算数运算符 + - * / int / float :数字类型 # print(10 + 3.1)# print(10 / 3)# print(10 // 3)# print(10 % 3 ...

  6. python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支

    python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...

  7. python运算符,数据类型,数据类型操作,三目运算,深浅拷贝

    算数运算符: Py2中精确除法需要导入:from __future__ import division,(符由特  ,将来的.滴未省,除法) py3不需要导入 赋值运算符: 比较运算符: 成员运算符: ...

  8. day52类型转换 运算符 流程控制

    0.复习 1.导入 <div id="div1" onclick="this.style.color = 'red';">12345</div ...

  9. 廖雪峰Java1-3流程控制-3条件判断

    1.if条件判断的格式 if (条件) { 代码块 } if (条件) { 代码块1 } else { 代码块2 } if (条件1) { 代码块1 } else if { 代码块2 } else { ...

随机推荐

  1. (数据科学学习手札114)Python+Dash快速web应用开发——上传下载篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  2. 【linux】系统编程-8-Socket

    目录 前言 11. 套接字 11.1 Socket简介 11.2 socket() 11.3 bind() 11.4 connect() 11.5 listen() 11.6 accept() 11. ...

  3. 第26 章 : 理解 CNI 和 CNI 插件

    理解 CNI 和 CNI 插件 本文将主要分享以下几方面的内容: CNI 是什么? Kubernetes 中如何使用 CNI? 哪个 CNI 插件适合我? 如何开发自己的 CNI 插件? CNI 是什 ...

  4. C++并发与多线程学习笔记--线程之间调度

    condition_variable wait() notify_one notify_all condition_variable 条件变量的实际用途: 比如有两个线程A和B,在线程A中等待一个条件 ...

  5. Scrapy框架的安装

    Win+R 输入cmd打开命令行 我们先把pip升级到最新版,输入代码如下: pip install --upgrade pip 不过一般这种更新方式会经常性出错,安装文件在下载到一半时就会超时报错 ...

  6. 【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗

    背景 早上刷圈看到 Spring Cloud Hoxton.M2 Released 的消息,随手发布到了我的知识星球,过了会有个朋友过来如下问题. 抽取半天时间学习spring-cloud-loadb ...

  7. manjaro配置攻略

    2021.1.30 更新 1 概述 本文主要讲述了新安装的Manjaro一些常用的配置,包括源.常用软件.快捷键.终端以及一些效率工具的配置. 2 pacman源 首先是pacman源的选择: sud ...

  8. 工作区和GOPATH

    工作区和GOPATH 1.特性: 1.1.5版本的自举(即用 Go 语言编写程序来实现 Go 语言自身) 2.1.7版本的垃圾回收器 2.GOROOT.GOPATH 和 GOBIN GOROOT:Go ...

  9. 没有SEO的DiscuzQ 值不值得站长选择?

    此文写于2021年1月22日.至少到今天,Discuz Q 依然没有推出SEO的解决方案. 据官方团队交流说,SEO是在需求池中排在第一位,但目前还没有相应的措施来解决无法SEO. Discuz Q: ...

  10. hdu3714 水三分

    题意:       给你一些函数 y = ax^2 + bx + c,的a >= 0 的二次函数,x的范围是0--1000, 问你在这个范围内函数值最大的最小是多少,最大指的是对于某一个x最大的 ...