[TOC]
一 程序与用户交互
1.1, 什么是与用户交互
用户交互就是人往计算机中 input / 输入数据, 计算机 print / 输出结果
1.2, 为什么要与用户交互?
插图: 恶搞图 12
为了让计算机能够像人一样与用户沟通交流
比如, 过去我们去银行取钱, 用户需要把帐号密码告诉柜员, 而现在, 柜员被 ATM 机取代, ATM 机就是一台计算机, 所以用户同样需要将帐号密码告诉计算机, 于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容, 并且输出结果
1.3, 如何与用户交互
交互的本质就是输入, 输出
1.3.1 输入 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'>
1.3.2 输出 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&[email protected]
1.3.3 输出之格式化输出
(1)什么是格式化输出?
把一段字符串里面的某些内容替换掉之后再输出, 就是格式化输出.
(2)为什么要格式化输出?
我们经常会输出具有某种固定格式的内容, 比如:'亲爱的 xxx 你好! 你 xxx 月的话费是 xxx, 余额是 xxx', 我们需要做的就是将 xxx 替换为具体的内容.
插图: 恶搞图 13
(3)如何格式化输出?
这就用到了占位符, 如:%s,%d:
- # %s 占位符: 可以接收任意类型的值
- # %d 占位符: 只能接收数字
- >>> print('亲爱的 %s 你好! 你 %s 月的话费是 %d, 余额是 %d' %('tony',12,103,11))
亲爱的 tony 你好! 你 12 月的话费是 103, 余额是 11
- # 练习 1: 接收用户输入, 打印成指定格式
- name = input('your name:')
- age = input('your age:') #用户输入 18, 会存成字符串 18, 无法传给 %d
- print('My name is %s,my age is %s' %(name,age))
- # 练习 2: 用户输入姓名, 年龄, 工作, 爱好 , 然后打印成以下格式
- ------------ info of Tony -----------
- Name : Tony
- Age : 22
- Sex : male
- Job : Teacher
- ------------- end -----------------
二 基本运算符
2.1 算术运算符
? python 支持的算数运算符与数学上计算的符号使用是一致的, 我们以 x=9,y=2 为例来依次介绍它们
2.2 比较运算符
? 比较运算用来对两个值进行比较, 返回的是布尔值 True 或 False, 我们以 x=9,y=2 为例来依次介绍它们
2.3 赋值运算符
? python 语法中除了有 = 号这种简单的赋值运算外, 还支持增量赋值, 链式赋值, 交叉赋值, 解压赋值, 这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简. 我们以 x=9,y=2 为例先来介绍一下增量赋值
###2.3.1 增量赋值
###2.3.2 链式赋值
如果我们想把同一个值同时赋值给多个变量名, 可以这么做
- >>> z=10
- >>> y=z
- >>> x=y
- >>> x,y,z
- (10, 10, 10)
链式赋值指的是可以用一行代码搞定这件事
- >>> x=y=z=10
- >>> x,y,z
- (10, 10, 10)
插图: 恶搞图 14
###2.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)
插图: 恶搞图 15
2.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)
插图: 恶搞图 16
注意, 上述解压赋值, 等号左边的变量名个数必须与右面包含值的个数相同, 否则会报错
- #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: 字符串, 字典, 元组, 集合类型都支持解压赋值
插图: 恶搞图 17
2.4 逻辑运算符
? 逻辑运算符用于连接多个条件, 进行关联判断, 会返回布尔值 True 或 False
2.4.1 连续多个 and
可以用 and 连接多个条件, 会按照从左到右的顺序依次判断, 一旦某一个条件为 False, 则无需再往右判断, 可以立即判定最终结果就为 False, 只有在所有条件的结果都为 True 的情况下, 最终结果才为 True.
- >>> 2> 1 and 1 != 1 and True and 3> 2 # 判断完第二个条件, 就立即结束, 得的最终结果为 False
- False
2.4.2 连续多个 or
可以用 or 连接多个条件, 会按照从左到右的顺序依次判断, 一旦某一个条件为 True, 则无需再往右判断, 可以立即判定最终结果就为 True, 只有在所有条件的结果都为 False 的情况下, 最终结果才为 False
- >>> 2> 1 or 1 != 1 or True or 3> 2 # 判断完第一个条件, 就立即结束, 得的最终结果为 True
- True
2.4.3 混用 and,or,not
- # and,or,not 三者如果混用时, 是存在优先级之分的, 但在日常开发中我们无需记忆优先级, 应该使用 () 来区分优先级, 提升程序的可读性
- >>> (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3>3)
- False
2.5 成员运算符
注意: 虽然下述两种判断可以达到相同的效果, 但我们推荐使用第二种格式, 因为 not in 语义更加明确
- >>> not 'lili' in ['jack','tom','robin']
- True
- >>> 'lili' not in ['jack','tom','robin']
- True
2.6 身份运算符
需要强调的是:== 双等号比较的是 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
来源: http://www.bubuko.com/infodetail-3347228.html