一、用户交互
1.1 什么是用户交互
用户交互就是人往计算机中输入数据,计算机输出结果
1.2 为什么要与用户交互
为了让计算机能够像人一样与用户沟通交流
比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果
1.3 如何与用户交互
input():可以让用户输入
int:整数类型(integer)
str:字符串类型(string)
str():把数据转成str类型
int():把字符串转成int类型>>> username = input('请输入您的用户名:')
请输入您的用户名:>>> password = input('请输入您的密码:')
请输入您的密码:
注:input接收的所有数据都是字符串,即便你输入的是数字,但依然会被当成字符串来处理,字符串和数字类型不可以拼接在一起
Python3:
input会将用户输入的所有内容都存成字符串类型
python2中:
raw_input():用法与python3的input一模一样
input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
二、输出格式化
2.1 %
什么是格式化输出:
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。
如何格式化输出:%号格式化字符串的方式从Python诞生之初就已经存在,时至今日,python官方也并未弃用%号,
但也并不推荐这种格式化方式。因为当需格式化的字符串过多时,位置极容易搞混
占位符:%s、%d%s占位符:可以接收任意类型的值%d占位符:只能接收数字
例:print('%s您好,你的账号余额为%d,q请及时充值' %('小明',10))
注:占位符与后面传入数值的%之间没有逗号,不然会有语法错误,不可以传入变量
值按照位置与%s一一对应,少一个不行,多一个也不行
以字典的形式传值,打破位置的限制
res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'egon'}print('hello world')print(type()) #打印类型
print(id()) #打印ID
换行符: \n
end: 自定义换行符print('hello\n',end='')print('word')print('hello',end='*')print('world',end='*')
2.2 format
str.format
该format方法是在Python2.6中引入的,是字符串类型的内置方法。
因为str.format的方式在性能和使用的灵活性上都比%号更胜一筹,所以推荐使用
使用位置参数,按照位置一一对应print('{} asked {} to do something'.format('lili', 'egon')) #lili asked egon to do something
使用索引取对应位置的值:print('{0}{0}{1}{0}'.format('x','y')) #xxyx
使用关键字参数or字典:
可以通过关键字or字典方式的方式格式化,打破了位置带来的限制与困扰print('我的名字是 {name}, 我的年龄是 {age}.'.format(age=18, name='egon'))
kwargs= {'name': 'egon', 'age': 18}print('我的名字是 {name}, 我的年龄是 {age}.'.format(**kwargs)) #使用**进行解包操作
填充与格式化:
先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]*<10:左对齐,总共10个字符,不够的用*号填充print('{0:*<10}'.format('开始执行')) #开始执行******
*>10:右对齐,总共10个字符,不够的用*号填充print('{0:*>10}'.format('开始执行')) #******开始执行
*^10:居中显示,总共10个字符,不够的用*号填充print('{0:*^10}'.format('开始执行')) #***开始执行***
进制转换:
十进制转二进制:bin(11)
十进制转八进制:oct(11)
十进制转十六进制:hex(11)
二进制转十进制:int('0b1011',2)
二进制转八进制:int('0o13',8)
二进制转十六进制:int('0xb',16)
示例:print('{salary:.3f}'.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124
print('{0:b}'.format(123)) #转成二进制,结果为:1111011
print('{0:o}'.format(9)) #转成八进制,结果为:11
print('{0:x}'.format(15)) #转成十六进制,结果为:f
print('{0:,}'.format(99812939393931)) #千分位格式化,结果为:99,812,939,393,931
format填充符号的使用:
^ 原字符串居中
> 原字符串居右
< 原字符串居左
{who:*^10}
who : 关键字参数
* : 要填充的字符
^ : 原字符串居中
10 : 总长度 = 原字符串长度 + 填充字符长度
strvar = "{who:*^10}在{where:>>10},{do:!<10}".format(who="小明",where="电影院",do="看喜洋洋")# ****小明****在>>>>>>>电影院,看喜洋洋!!!!!!
特殊符号的使用
:d 整型占位符,要求数据类型必须是整型,否则会抛出异常
:2d 占用两位,不够两位拿空格来补,默认居右
:f 浮点型占位符,要求数据类型必须是浮点型,否则会抛出异常
:.2f 小数点保留2位,默认小数保留六位
:s 字符串占位符,要求数据类型必须是字符串
:, 金钱占位符
strvar = "{:,}".format(123456789) 123,456,789
2.3 f-Strings
f-Strings:
str.format() 比%格式化高级了一些,但是它还是有自己的缺陷。当需要传入的字符串过多时,仍然会显得
非常冗长。在Python3.6中引入 了f-strings,不仅比str.format更简洁,性能上也更胜一筹。python3.5以后才推出
f-string是以f或F开头的字符串, 核心在于字符串中符号{}的使用,其中{}中可以是变量名,表达式
详情参考:https://zhuanlan.zhihu.com/p/110406030
三、运算符
3.1 算数运算符
算数运算符描述示例(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
3.2 比较运算符
比较运算符描述示例
==
等于,两个对象相等则返回True,否则返回false
x==y
!=
不等于,两个对象相等则返回False,否则返回Tuer
x!=y
>
大于
x > y
>=
大于等于
x >= y
<
小于
x < y
<=
小于等于
x <=y
3.3 赋值运算符
赋值运算符描述示例
=
简单赋值运算
x = 10
+=
加法赋值运算
x = 10,x +=1 #等同于x= x+1
-=
减法赋值运算
同上
*=
乘法赋值运算
同上
/=
除法赋值运算
同上
//=
取整除赋值运算
同上
%=
取余赋值运算
同上
**=
幂赋值运算
同上
链式赋值:
把一个值同时赋值给多个变量
x=1,y=2,c=3等同于x=y=z=3交叉赋值:
若两个变量想交换值
x=1 y=2 交换为x=2 y=1x,y=y,x
解压赋值:
若想把列表中的多个值取出来依次赋值给多个变量
nums=[11,22,33,44,55],若一个一个的取值太麻烦
解压赋值
a,b,c,d,e=nums #nums包含多个值,就好比一个压缩包,解压赋值因此得名
解压赋值,等号左边的变量名个数必须与右面包含值的个数相同,否则会报错
若只想取头尾的几个值可以用*匹配,但是无法匹配中间的值
a,b,*_=nums #没有取的值,会存成列表,然后赋值给*后面的那个值
字符串、字典、元组、集合类型都支持解压赋值
解压字典默认解压出来的是字典的key
3.4 逻辑运算符
逻辑运算符描述示例
and
逻辑与,用于连接两个条件,两个条件同时成立时才返回true, 但凡有一个条件为falase则返回false
a and b
or
逻辑或,用于连接两个条件,两个条件但凡有一个条件成立 则返回true,只有在两个条件同时为false时,才返回false
a or b
not
逻辑非,用于对结果取反
a not b
三者的优先级关系:not>and>or,同一优先级默认从左往右计算
3.5 成员运算符
成员运算符描述示例
in
某一个对象包含于另外一个对象则返回True 字符串,列表,元组,字典,集合都支持成员运算
not in
某一个对象没有包含于另外一个对象则返回True
3.6 身份运算符
身份运算符描述示例
is
is比较的是ID,两个对象的ID相同则返回True
is not
在两个对象的ID不同时is not会返回true
注: ==双等号比较的是value是否相等,而is比较的是id是否相等
id相同,内存地址必定相同,意味着type和value必定相同
value相同type肯定相同,但id可能不同
短路运算:
当计算到某个位置时候,已经得出结论,则不再进行运算
3.7 位运算符
位运算符描述示例
&
按位与
|
按位或
~
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x类似于 -x-1
^
按位异或 两个值不一样,返回真,否则返回假
<<
左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
>>
右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>>右边的数字指定了移动的位数
四、可变不可变类型
可变不可变类型:
可变类型:
值改变,id不变,证明改的是原值,证明原值是可以被改变的
不可变类型:
值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的
总结:
int、float、str都被设计成了不可分割的整体,不能够被改变
只有list和dict是可变类型,其它的都是不可变类型
五、显式布尔值与隐式布尔值
显式布尔值与隐式布尔值:
显式布尔值:
True、False
隐式布尔值:所有数据类型,其中0、None、空为假
0、None、空(空字符串、空列表、空字典)=》代表的布尔值为False,其余都为真