[基本运算符、流程控制之if判断、与用户交互、深浅拷贝]
[基本运算符、流程控制之if判断、与用户交互]
基本运算符
1、算数运算符
python支持的算术运算符与数学上计算的符号使用是一致的
salary = 3.3
res = salary * 12
print(10 + 1) # 加法
print(10 - 3) # 减法
print(10 * 3) # 乘法
print(10 / 3) # 除法,得到的返回值会保留整数与小数部分
print(10 // 3) # 取整除,得到的返回值只保留整数部分(地板除)
print(10 % 3) # 取余数,相除后只返回余数
print(10 ** 3) # 幂,10的3次方
print(10 + 3.1)
print(10 % 3)
# ps:整型和浮点型可以混着计算<数字类型>
2、比较运算符
比较运算用来对两个值进行比较,返回的是布尔值True或False
== 等于,两个对象相等返回True,否则返回False
!= 感叹号等于,两个对象相等返回False,否则返回True
> 大于
>= 大于等于
< 小于
<= 小于等于
x = 10
y = 10.0
print(x == y) #整型和浮点型比较
# True
m = 10 # 整型
n = "10" # 字符串类型
print(m == n) #仅限同类型
# False
print(10 == [1,2,3]) # == 不限类型
# False
print(10 + [1,2,3]) # 报错
print(10 == [1,2,3])
# False
print(10 != [1,2,3])
# True
print(10 > 3.1)
print(10 >= 3.1)
print(10 <= 3.1)
print(10 < 3.1)
3、赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、
解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简
增量赋值
= 简单赋值运算
+= 加法赋值运算
-= 减法赋值运算
*= 乘法赋值运算
/= 除法赋值运算
//= 取整赋值运算
%= 取余赋值运算
**= 幂赋值运算
age = 18 # 简单赋值运算
age += 10 # age = age + 10 # 加法赋值运算
print(age)
# 28
age *= 10 # 乘法赋值运算
print(age)
# 180
age %= 3 # age = age % 3 # 取余赋值运算
print(age)
# 0
链式赋值
如果我们想把同一个值同时赋值给多个变量名,可以这么做
x = 10
y=x
z=y
链式赋值指的是可以用一行代码搞定这件事
x=y=z=10
print(x,y,z)
print(id(x),id(y),id(z))
交叉赋值
我们定义两个变量m与n
如果我们将m与n的值交换过来
m=10
n=20
temp=n
n=m
m=temp
m,n=n,m
print(m,n)
交叉赋值指的是一行代码可以搞定这件事
解压赋值
如果我们想把列表中的多个值取出来一次赋值给多个变量名,可以这么做
salaries=[11,22,33,44,55,66,77]
mon1=salaries[0]
mon2=salaries[1]
mon3=salaries[2]
mon4=salaries[3]
mon5=salaries[4]
mon6=salaries[5]
mon7=salaries[6]
mon1,mon2,mon3,mon4,mon5,mon6,mon7=salaries
# 变量名变少了
mon1,mon2,mon3,mon4,mon5,mon6,=salaries # 错误
# 变量名变多了
mon1,mon2,mon3,mon4,mon5,mon6,mon7,mon8=salaries # 错误
# 如果只想取头尾的几个值,可以用*_匹配
mon1,mon2,mon3,*_=salaries
print(mon1)
print(mon2)
print(mon3)
print(_)
# 取倒数两个值
*_,last2,last1=salaries
print(last1)
print(last2)
print(_)
# 取前一个以及后两个值
mon1,*_,last2,last1=salaries
print(mon1)
print(last1)
print(last2)
# 如果想取中间的值,*加middle
_,*middle,_=salaries
print(middle)
print(_)
# _同样的数值代替以最新的冲掉原值,所以_显示的是77
4、逻辑运算符
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
not: 将紧跟其后的那个条件取反,not优先级最高
print(not 10 > 3) # False
or: 连接左右两个条件,但凡有一个条件为True,最终结果就为True
print("egon" == "egon" or 10 > 3)
# Ture print("egon" == "Egon" or 10 > 3)
# Ture
优先级:not>and>or
① 三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
3>4 and 4>3 or not 1 == 3 and 'x' == 'x' or 3 >3 print(3>4 and 4>3 or not 1==3 and 'x' == 'x' or 3 >3) (3>4 and 4>3) or (not 1==3 and 'x' == 'x') or 3 >3 # True
② 最好使用括号来区别优先级,其实意义与上面一样
原理为:
(1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
(2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
(3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运
print(1 != 1 or 3 > 4 and not "xx" == "egon" or 1 > 10 and 9 > 3 and 1 > 0) 1 != 1 or (3 > 4 and not "xx" == "egon") or ((1 > 10 and 9 > 3) and 1 > 0) # False
③ 短路运算:偷懒原则(能少算就尽量少算)
逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回
print(1 > 0 and 1 != 1 and 3 > 2)
# False
print(1 > 0 or 1 != 1 or 3 > 2)
# True
补充了解:布尔值分为两大类
1、显式的布尔值:能明确地得到True或False,比如x=True,10 > 3, 10 > 3 and 1==1
例如:
3 == 1 and True and 10 > 3
print(3 == 1 and True and 10 > 3)
# False
2、隐式的布尔值:所有的数据类型的值都可以当作隐式的布尔值,其中0、None、空、对应
隐式布尔值为False,其余对应隐式布尔值为True
10 and 3 and 4 > 2
print(10 and 3 and 4 > 2)
# True
print(10 and 0 and 4 > 2)
# 0
print(0 and 2 or 1)
# 1
流程控制之if判断
流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为
三种结构:顺序结构之前我们写的代码都是顺序结构)、分支结构(用到if判断)、
循环结构(用到while与for)
1、什么是判断
判断 条件:
符合条件做xxx
否则:
做yyy
2、为何要判断
为了让计算机像人一样根据条件的判断结果去做不同的事情
3、用if关键字来实现分支结构,如何用:完整语法
print("start...")
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,代码3
代码1
代码2
代码3
elif 条件2: # 如果条件2的结果为True,就依次执行:代码1、代码2,代码3
代码1
代码2
代码3
elif 条件3: # 如果条件3的结果为True,就依次执行:代码1、代码2,代码3,......
代码1
代码2
代码3
......
else: #其它情况,就依次执行:代码1,代码2,代码3
代码1
代码2
代码3
print("end...")
注意:
1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
2、条件可以是任意表达式,但执行结果必须为布尔类型 在if判断中所有的数据类型也都会自动转换
成布尔类型
2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
2.2、其余均为True
1、单分支
print("start...")
if 条件1:
代码1
代码2
代码3
print("end...")
案例:
print("start...")
inp_name = "egon"
inp_pwd = "456"
db_name = "egon"
db_pwd = "456"
if inp_name == db_name and inp_pwd == db_pwd:
print("用户登录成功")
print("end...")
2、双分支
print("start...")
if 条件1:
代码1
代码2
代码3
else:
代码1
代码2
代码3
print("end...")
案例:
print("start...")
inp_name = "xxx"
inp_pwd = "456"
db_name = "egon"
db_pwd = "456"
if inp_name == db_name and inp_pwd == db_pwd:
print("用户登录成功")
else:
print("账号或密码输入错误")
print("end...")
3、多分支
print("start...")
if 条件1:
代码1
代码2
代码3
elif 条件2:
代码1
代码2
代码3
elif 条件3:
代码1
代码2
代码3
print("end...")
# 如果:成绩>=90,那么:优秀
# 如果成绩>=80且<90,那么:良好
# 如果成绩>=70且<80,那么:普通
# 其他情况:很差
# 案例:
score = 83
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("普通")
else:
print("很差")
与用户交互
1、接收用户输入
inp_name = input("请输入您的用户名:")
inp_name = "123"
print(inp_name,type(inp_name))
# 案例1:
print("start...")
inp_name = input("请输入您的用户名:") # inp_name = "egon"
inp_pwd = input("请输入您的密码:") # inp_pwd = "123"
db_name = "egon"
db_pwd = 456
f inp_name == db_name and inp_pwd == db_pwd:
print("用户登录成功")
else:
print("账号或密码输入错误")
print("end...")
# 案例2:
score = 83
score = input("请输入您的成绩:") # score = "83"
score = int(score) # 将纯数字组成的字符串转成整型
if score >= 90: # "83" >= 90
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("普通")
else:
print("很差")
# python2的raw_input() 等同于python3的input
2、格式化输出
print("1111",end='')
print("2222")
name = input("your name: ")
age = input("your age: ")
print("my name is %s my age is %s" % (name,age))
print("my name is %s my age is %d" % ("egon",19))
print("my name is %s my age is %d" % ("egon","19")) # %d 只能接收数字
print("my name is %s my age is %s" % ("egon",[1,2,3]))
- 浅拷贝
针对于可变对象,浅拷贝的时候会开辟一块内存空间,仅仅是最顶层开辟了,里层元素的地址是相同的。
针对于不可变对象,浅拷贝的时候仅仅是拷贝了引用,并不会开辟新的内存空间
浅拷贝之后,改变拷贝之后的对象中的不可变对象,并不会影响原始对象中的元素,但是,如果改变拷贝之后的对象中的可变对象,会同时影响原始对象中的元素。
- 深拷贝
深拷贝除了顶层拷贝以外,还对子元素进行了拷贝,本质就是递归浅拷贝。
import copy
lis = ['Tim Cook', '50', ['basketball', 'football']]
# 浅拷贝
# new_lis = copy.copy(lis)
# new_lis[-1].append('music')
# print(f'原列表:{lis}')
# print(f'浅拷贝列表:{new_lis}')
'''
运行结果:
原列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
浅拷贝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
'''
# 深拷贝
new_lis_2 = copy.deepcopy(lis)
new_lis_2[-1].append('music')
print(f'原列表:{lis}')
print(f'深拷贝列表:{new_lis_2}')
'''
运行结果:
原列表:['Tim Cook', '50', ['basketball', 'football']]
深拷贝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
[基本运算符、流程控制之if判断、与用户交互、深浅拷贝]的更多相关文章
- 基础运算符补充,流程控制之if判断/while循环
常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...
- 格式化输出的三种方式,运算符及流程控制之if判断
''' 格式化输出的三种方式,运算符及流程控制之if判断 ''' # 格式化输出的三种方式 # 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄 ...
- python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法
基本运算符 运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运 ...
- <基础> PHP 运算符 流程控制
PHP运算符优先级: 递增/递减 (++ / --) > 算术运算符(+ .- .* ./) > 大小比较 > 逻辑与 (&)> 逻辑或(||) > 三目 > ...
- day04 运算符 流程控制 (if while/of)
1. 运算符算数运算符 + - * / int / float :数字类型 # print(10 + 3.1)# print(10 / 3)# print(10 // 3)# print(10 % 3 ...
- python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支
python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...
- python运算符,数据类型,数据类型操作,三目运算,深浅拷贝
算数运算符: Py2中精确除法需要导入:from __future__ import division,(符由特 ,将来的.滴未省,除法) py3不需要导入 赋值运算符: 比较运算符: 成员运算符: ...
- day52类型转换 运算符 流程控制
0.复习 1.导入 <div id="div1" onclick="this.style.color = 'red';">12345</div ...
- 廖雪峰Java1-3流程控制-3条件判断
1.if条件判断的格式 if (条件) { 代码块 } if (条件) { 代码块1 } else { 代码块2 } if (条件1) { 代码块1 } else if { 代码块2 } else { ...
随机推荐
- CDN域名解析问题
CDN域名解析问题 之前配置CDN域名解析,碰到一个配置带www的域名和不带www的域名,这里就有个解析的坑,已经将cdn域名都配置好的,但是一直访问不了,白屏现象 后面排除源站问题和cdn配置问题, ...
- [DP]城市交通
城市交通 Time Limit:1000MS--Memory Limit:65536K 题目描述 有n个城市,编号1~n,有些城市之间有路相连,有些则没有,有路则当然有一个距离.现在规定只能从编号小的 ...
- 为什么要放弃 JSP?他们终于给出了答案
前言 以前的项目大多数都是Java程序猿又当爹又当妈,既搞前,又搞后端. 随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情.正 ...
- @PostConstruct 使用记录
@PostConstruct 从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这 ...
- SparkStreaming使用mapWithState时,设置timeout()无法生效问题解决方案
前言 当我在测试SparkStreaming的状态操作mapWithState算子时,当我们设置timeout(3s)的时候,3s过后数据还是不会过期,不对此key进行操作,等到30s左右才会清除过期 ...
- 201871030103-陈荟茹 实验二 个人项目―《D{0-1}KP问题》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 1.理解掌握软件设计的过程中的各个环节2.掌握github的使用,将自己的项目上传至githu中 这个作业 ...
- Python数据分析入门(十七):绘制条形图
条形图的绘制方式跟折线图非常的类似,只不过是换成了plt.bar方法.plt.bar方法有以下常用参数: x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点. height:一个数组或者列表,代 ...
- 周爱民带你深入剖析JavaScript核心原理
作为前端工程师必备技能,JavaScript 的重要性不言而喻.虽然易上手,但却有着诸多复杂微妙的机制,想要真正掌握绝非易事. 专栏面向JavaScript语言的实际应用者与深度爱好者,以讲述Java ...
- 它来了,它来了,HarmonyOS应用开发在线体验来了
接下来是我们的两分钟科普,一分钟玩转HarmonyOS应用开发在线体验,一分钟简单了解"一次开发.多设备部署"的原理.萌新的开发者也能第一时间掌握,往下看吧~ 一分钟玩转Harmo ...
- Mybatis的Dao层实现原理
1.Mybatis的Dao层实现 1.1 传统开发方式 1.1.1编写UserDao接口 public interface UserDao { List<User> findAll() t ...