[基本运算符、流程控制之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判断、与用户交互、深浅拷贝]的更多相关文章

  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. exe取消动态基址

    动态基址开启后,在动态调试是想要和ida静态分析中的地址对应还要进行一步计算,取消动态基址便可以剩下很多时间. 只要修改pe文件头中的Characteristics低位置1 1 typedef str ...

  2. Python基础之:Python中的类

    目录 简介 作用域和命名空间 class 类对象 类的实例 实例对象的属性 方法对象 类变量和实例变量 继承 私有变量 迭代器 生成器 简介 class是面向对象编程的一个非常重要的概念,python ...

  3. K8S 本地 配置 Local PV 实践

    上面我们创建了后端是 hostPath 类型的 PV 资源对象,我们也提到了,使用 hostPath 有一个局限性就是,我们的 Pod 不能随便漂移,需要固定到一个节点上,因为一旦漂移到其他节点上去了 ...

  4. 学习笔记-vue 打包去#和页面空白问题

    文件资源路径是对的,但是页面空白.百度了很久找了一篇文章解决了. 1.vue项目中config文件下index.js中打包配置 build: { // Template for index.html ...

  5. JS基础学习第六天

    数组(Array) 数组也是一个对象,它和普通的对象一样,也是用来存储一些值的,不同的是普通对象是使用字符串作为属性名的,而数组使用数字作为索引来操作元素数组的存储性能比普通对象好,再开发中我们经常使 ...

  6. vm16 安装 || 待检验 || 预测无问题

    vm16 安装 安装 下载 下载地址 管理员运行 安装 其余都点下一步/NEXT 激活 完成

  7. Linux保护机制和绕过方式

    Linux保护机制和绕过方式 CANNARY(栈保护) ​ 栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行.用C ...

  8. CTF导引(一)

    ctf预备知识: 视频:https://www.bilibili.com/video/av62214776?from=search&seid=1436604431801225989 CTF比赛 ...

  9. Sublime Text 3.1 3170 / 3176 注册码(附降级与禁止更新方法)

    3.1 3176 可用注册码 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com ----- BEGIN LICENSE --- ...

  10. AppScan扫描器的用法

    目录 AppScan 软件功能 建立一次基础的扫描 AppScan AppScan是一款非常好用且功能强大的Web 应用安全测试工具,曾以 Watchfire AppScan 的名称享誉业界,AppS ...