Python 学习笔记 语法入门 -用户交互、运算符
程序与用户互交
1、什么是与用户互交
用户呼叫就是人 往计算机中输入数据,计算机输出结果、
Python 中
输入数据:input
输出结果:print
2、为什么要与用户互交
为了让计算器能够与人沟通交流;比如,现在银行的ATM机,其本质就是计算机,用户需要告诉ATM 自己的账户信息,计算机就收信息并给出结果。
互交的本质就是输入、输出。
3、输入input:
# 在python3中input功能会等待用户的输入,用户输入任何内容,都存成字符串类型,然后赋值给等号左边的变量名 >>> username=input('请输入您的用户名:') 请输入您的用户名:jack # username = "jack" >>> password=input('请输入您的密码:') 请输入您的密码:123 # password = "123" # 了解知识: # 1、在python2中存在一个raw_input功能与python3中的input功能一模一样 # 2、在python2中还存在一个input功能,需要用户输入一个明确的数据类型,输入什么类型就存成什么类型 >>> l=input('输入什么类型就存成什么类型: ') 输入什么类型就存成什么类型: [1,2,3] >>> type(l) <type 'list'>
4、输出print:
>>> print('hello world') # 只输出一个值 hello world >>> print('first','second','third') # 一次性输出多个值,值用逗号隔开 first second third # 默认print功能有一个end参数,不写该参数的默认值为"\n"(代表换行),可以将end参数的值改成任意其它字符 print("aaaa",end='') print("bbbb",end='&') print("cccc",end='@') # 整体输出结果为:aaaabbbb&cccc@
5、格式化输出
格式化输出:指的是把一段内容提前设置好格式,把需要的替换的内容使用占位符标识出来。
格式化字符串四种传值方式:
- %号
- str.format (推荐使用,版本间兼容性最好)
- f-Str
- 标准库模板
5.1、%s传值
值可以是是任何类型,但值需要对应%号位置,值的数量多或少都会报错。
# 使用%s号替换符,传值 res = ''' ------------ info of Tony ----------- Name : %s Age : %s Sex : %s Job : %s ------------- end ----------------- ''' x = res % ('Tony',22,'male','teacher') print(x) # 输出结果 ------------ info of Tony ----------- Name : Tony Age : 22 Sex : male Job : Teacher ------------- end ----------------- # 这就用到了占位符,如:%s、%d:按照位置替换对应位置,对应位置的值,多或少都会报错,要刚刚好!
%s可以用字典型形式传值,可以不用对应位置
res = "我的名字是: %(name)s,我的年龄是: %(age)s" % {"age":18,"name":"euge"} #字典 print(res) # 输出结果 : 我的名字是: euge,我的年龄是: 18
%d 传值只能接收 数字类型:
# %s占位符:可以接收任意类型的值 # %d占位符:只能接收数字 print('亲爱的%s你好!你%s月的话费是%d,余额是%d' %('tony',12,103,11)) # 输出结果:亲爱的tony你好!你12月的话费是103,余额是11
5.2、str.format 传值
- 按照位置传值
res = "我的名字是:{},我的年龄是:{}".format('euge',18) print(res) # 我的名字是:euge,我的年龄是:18 res = "我的名字是:{0},我的年龄是:{1}".format('euge',18) print(res) # 我的名字是:euge,我的年龄是:18
- 打破位置的现在传值,str.format(key=value)
res = "我的名字是:{name},我的年龄是:{age}".format(age=18,name='euge') print(res) # 我的名字是:euge,我的年龄是:18
5.3、f-str的方式传值,Python 3.5以后的版本才能使用
x = input('你的名字:') y = input('你的年龄:') res = f'你的名字是{x},你的年龄是{y}' print(res) #输入 你的名字:euge #输入 你的年龄:18 #输出结果 你的名字是euge,你的年龄是18
二、基本运算符
1、算术运算符
Python支持的算数运算符与数学上计算的符号使用是一致的,
| 算数运算符 | 描述 | 示例,x=9,y=2 |
| + | 加,两个对象相加 | x + y 得11 |
| - | 减,两个对象相减 | y - x 得 -7 |
| * | 乘,两个对象相乘 | x * y 得18 |
| / | 除,相除后得到的返回值会保留整数与小数部分 | x / y 得4.5 |
| // | 取整除,相除后得到返回值只保留整数部分 | x // y 得4 |
| % | 取余,相除后只返回余数 | x % y 得1 |
| ** | 幂,取一个数的N次方 | x ** y 得81 |
2、比较运算符
比较运算用来对两个值进行比较,返回的是布尔值True或False。
|
比较运算符 |
描述 | 示例,x=9,y=2 |
|
== |
等于,两个对象相等则返回True,否则返回False | x == y 得False |
|
> |
大于 | x > y 得True |
|
>= |
大于等于 | x >= x 得True |
|
< |
小于 | x < y 得False |
|
<= |
小于等于 | x <= x 得True |
|
!= |
不等于,两个对象相等则返回Fals,否则返回True | x != y 得True |
3、赋值运算符
Python 语法中除了有 = 号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值。
这些赋值运算符的意义就是让代码看起来更加简洁。
3.1 增量赋值
| 赋值运算符 | 描述 | 示例,x=9,y=2 |
| = | 简单赋值运算 | x = 10 |
| += | 加法赋值运算 |
x += 1 等同于 x + 1 得10 |
| -= | 减肥赋值运算 |
y -= 1 等同于 y - 1 得 1 |
| *= | 乘法赋值运算 |
y *= 2 等同于 y * 2 得 4 |
| /= | 除法赋值运算 |
x /= 2 等同与 x / 2 得 4.5 |
| //= | 取整数赋值运算 |
x //= 2 等同于 x // 2 得 4 |
| %= | 取余赋值运算 |
x %= 2 等同于 x % 2 得 1 |
| **= | 幂赋值运算 |
x **= 2 等同于 x ** 2 得 81 |
3.2 链式赋值
如果我们想把同一个值同时赋值给多个变量名,可以这么做
>>> z=10 >>> y=z >>> x=y >>> x,y,z (10, 10, 10)
链式赋值指的是可以用一行代码搞定这件事
>>> x=y=z=10
>>> x,y,z
(10, 10, 10)
3.3 交叉赋值
我们定义两个变量m与n
>>> m=10 >>> n=20
如果我们想将m与n的值交换过来,可以这么做
>>> temp=m >>> m=n >>> n=temp >>> m,n (20, 10)
交叉赋值指的是一行代码可以搞定这件事
>>> m=10 >>> n=20 >>> m,n=n,m # 交叉赋值 >>> m,n (20, 10)
3.4 解压赋值
如果我们想把列表中的多个值取出来依次赋值给多个变量名,可以这么做
>>> nums=[11,22,33,44,55] >>> >>> a=nums[0] >>> b=nums[1] >>> c=nums[2] >>> d=nums[3] >>> e=nums[4] >>> a,b,c,d,e (11, 22, 33, 44, 55)
解压赋值指的是一行代码可以搞定这件事
>>> a,b,c,d,e=nums # nums包含多个值,就好比一个压缩包,解压赋值因此得名 >>> a,b,c,d,e (11, 22, 33, 44, 55)
注意,上述解压赋值,等号左边的变量名个数必须与右面包含值的个数相同,否则会报错
#1、变量名少了 >>> a,b=nums Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: too many values to unpack (expected 2) #2、变量名多了 >>> a,b,c,d,e,f=nums Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: not enough values to unpack (expected 6, got 5)
但如果我们只想取头尾的几个值,可以用*_匹配
>>> a,b,*_=nums >>> a,b (11, 22)
ps:字符串、字典、元组、集合类型都支持解压赋值
4 逻辑运算符
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
| 逻辑运算符 | 描述 | 示例 |
| and |
逻辑与,用于连接两个条件,两个条件同时成立时才返回True, 但凡有一个条件为False则返回False |
3 > 1 and 4 == 4 得True |
| or |
逻辑或,用于连接两个条件,两个条件有一个成立就返回True, 只有在两条件同时为False时才返回False |
1 > or 3 > 1 得 True |
| not | 取反 |
not 1 > 2 得True |
4.1 连续多个and
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
>>> 2 > 1 and 1 != 1 and True and 3 > 2 # 判断完第二个条件,就立即结束,得的最终结果为False False
4.2 连续多个or
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
>>> 2 > 1 or 1 != 1 or True or 3 > 2 # 判断完第一个条件,就立即结束,得的最终结果为True True
4.3 优先级not>and>or
#1、三者的优先级关系:not>and>or,同一优先级默认从左往右计算。 >>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3 False #2、最好使用括号来区别优先级,其实意义与上面的一样 ''' 原理为: (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割 (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可 (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算 ''' >>> (3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3 False #3、短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回 >>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4 我们用括号来明确一下优先级 >>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4 短路: 0 '' 'abc' 假 假 真 返回: 'abc' #4、短路运算面试题: >>> 1 or 3 1 >>> 1 and 3 3 >>> 0 and 2 and 1 0 >>> 0 and 2 or 1 1 >>> 0 and 2 or 1 or 4 1 >>> 0 or False and 1 False
5、成员运算符
| 成员运算符 | 描述 | 示例 |
| in |
某个对象包含与另一个对象则返回True 字符串、列表、元组、字典、合集都支持成员运算 |
>>> 'hello' in 'hello world!' True >>> 'yyy' in ['xxx','yyy','mmm'] True # 判断的是字典的key >>> 18 in {'neme':lili , 'age':18 } False |
| not in | 某一个对象没有包含于另一个对象则返回True |
>>>'abc' not in 'hello world!' True |
注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确
>>> not 'lili' in ['jack','tom','robin'] True
>>> 'lili' not in ['jack','tom','robin'] True
6、 身份运算符
| 身份运算符 | 描述 | 示例 |
| is | is比较的是id,两个对象的id 相同则返回True |
>>> x = 10 >>> y = x >>> id(x),id(y) # x于y的id相同 (4323801744,4323801744) >>> x is y True |
| is not | 在两个对象的id 不同时is not 会返回 True |
>>> m = 'xxx' >>> n = 'yyy' >>> id(m),id(n) # m于n的id不同 (4327441776,4323801744) >>> m in not n True |
需要强调的是:==双等号比较的是value是否相等,而is比较的是id是否相等
#1. id相同,内存地址必定相同,意味着type和value必定相同 #2. value相同type肯定相同,但id可能不同,如下 >>> x='Info Tony:18' >>> y='Info Tony:18' >>> id(x),id(y) # x与y的id不同,但是二者的值相同 (4327422640, 4327422256) >>> x == y # 等号比较的是value True >>> type(x),type(y) # 值相同type肯定相同 (<class 'str'>, <class 'str'>) >>> x is y # is比较的是id,x与y的值相等但id可以不同 False

浙公网安备 33010602011771号