用户交互就是人往计算机中input/输入数据,计算机print/输出结果
为了让计算机能够像人一样与用户沟通交流
比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果
交互的本质就是输入、输出
| |
| >>> username=input('请输入您的用户名:') |
| 请输入您的用户名:jack |
| >>> password=input('请输入您的密码:') |
| 请输入您的密码:123 |
| |
| |
| |
| |
| >>> l=input('输入什么类型就存成什么类型: ') |
| 输入什么类型就存成什么类型: [1,2,3] |
| >>> type(l) |
| <type 'list'> |
| >>> print('hello world') |
| hello world |
| >>> print('first','second','third') |
| first second third |
| |
| |
| print("aaaa",end='') |
| print("bbbb",end='&') |
| print("cccc",end='@') |
| |
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。
我们经常会输出具有某种固定格式的内容,比如:’亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体的内容。
这就用到了占位符,如:%s、%d:
| |
| |
| >>> print('亲爱的%s你好!你%s月的话费是%d,余额是%d' %('tony',12,103,11)) |
| 亲爱的tony你好!你12月的话费是103,余额是11 |
| |
| |
| name = input('your name: ') |
| age = input('your age: ') |
| print('My name is %s,my age is %s' %(name,age)) |
| |
| |
| ------------ info of Tony ----------- |
| Name : Tony |
| Age : 22 |
| Sex : male |
| Job : Teacher |
| ------------- end ----------------- |
python支持的算数运算符与数学上计算的符号使用是一致的,我们以x=9,y=2为例来依次介绍它们
比较运算用来对两个值进行比较,返回的是布尔值True或False,我们以x=9,y=2为例来依次介绍它们
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简。我们以x=9,y=2为例先来介绍一下增量赋值
如果我们想把同一个值同时赋值给多个变量名,可以这么做
| >>> z=10 |
| >>> y=z |
| >>> x=y |
| >>> x,y,z |
| (10, 10, 10) |
链式赋值指的是可以用一行代码搞定这件事
| >>> x=y=z=10 |
| >>> x,y,z |
| (10, 10, 10) |
我们定义两个变量m与n
如果我们想将m与n的值交换过来,可以这么做
| >>> temp=m |
| >>> m=n |
| >>> n=temp |
| >>> m,n |
| (20, 10) |
交叉赋值指的是一行代码可以搞定这件事
| >>> m=10 |
| >>> n=20 |
| >>> m,n=n,m |
| >>> m,n |
| (20, 10) |
如果我们想把列表中的多个值取出来依次赋值给多个变量名,可以这么做
| >>> 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 |
| >>> a,b,c,d,e |
| (11, 22, 33, 44, 55) |
注意,上述解压赋值,等号左边的变量名个数必须与右面包含值的个数相同,否则会报错
| |
| >>> a,b=nums |
| Traceback (most recent call last): |
| File "<stdin>", line 1, in <module> |
| ValueError: too many values to unpack (expected 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:字符串、字典、元组、集合类型都支持解压赋值
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
| >>> 2 > 1 and 1 != 1 and True and 3 > 2 |
| False |
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
| >>> 2 > 1 or 1 != 1 or True or 3 > 2 |
| True |
| |
| >>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3 |
| False |
| |
| |
| ''' |
| 原理为: |
| (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 |
| |
| |
| >>> 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' |
| |
| |
| >>> 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 |
注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确
| >>> not 'lili' in ['jack','tom','robin'] |
| True |
| >>> 'lili' not in ['jack','tom','robin'] |
| True |
需要强调的是:==双等号比较的是value是否相等,而is比较的是id是否相等
| |
| |
| >>> x='Info Tony:18' |
| >>> y='Info Tony:18' |
| >>> id(x),id(y) |
| (4327422640, 4327422256) |
| |
| >>> x == y |
| True |
| >>> type(x),type(y) |
| (<class 'str'>, <class 'str'>) |
| >>> x is y # is比较的是id,x与y的值相等但id可以不同 |
| False |