python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。 html
(龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到如今,依然掌握着Python发展的核心方向,被称为仁慈的独裁者)。java
2018年12月的TIOBE排行榜,Python已经占据第三的位置, Python崇尚优美、清晰、简单,是一个优秀并普遍使用的语言。python
由上图可见,Python总体呈上升趋势,反映出Python应用愈来愈普遍而且也逐渐获得业内的承认!!!c++
Python能够应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎全部大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。程序员
目前Python主要应用领域:web
Python在一些公司的应用: 算法
python发展史shell
编程语言主要从如下几个角度为进行分类:编译型 和 解释型、静态语言 和 动态语言、强类型定义语言 和 弱类型定义语言,每一个分类表明什么意思呢,咱们一块儿来看一下。编程
2.1 编译型与解释型。小程序
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的.
这是由于计算机不能直接认识并执行咱们写的语句,它只能认识机器语言(是二进制的形式)
编译型
解释型
2.二、动态语言和静态语言
一般咱们所说的动态语言、静态语言是指 动态类型语言 和 静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去作数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python 和 Ruby就是一种典型的动态类型语言,其余的各类脚本语言如 VBScript 也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言恰好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明全部变量的数据类型,C/C++是静态类型语言的典型表明,其余的静态类型语言还有C#、JAVA等。
2.三、强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么它就永远是这个数据类型了。
举个例子:若是你定义了一个整型变量a,那么程序根本不可能将a看成字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不一样数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,可是强类型定义语言带来的严谨性可以有效的避免许多错误。
另外,“这门语言是否是动态语言”与“这门语言是否类型安全”之间是彻底没有联系的!例如:
经过上面这些介绍,咱们能够得出,python是一门动态解释性的强类型定义语言。
先看优势
再看缺点:
当咱们编写Python代码时,咱们获得的是一个包含Python代码的以.py
为扩展名的文本文件。要运行代码,就须要Python解释器去执行.py
文件。
因为整个Python语言从规范到解释器都是开源的,因此理论上,只要水平够高,任何人均可以编写Python解释器来执行Python代码(固然难度很大)。事实上,确实存在多种Python解释器。
当咱们从Python官方网站下载并安装好Python 3.6后,咱们就直接得到了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,因此叫CPython。
在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的全部代码也都在CPython下执行。
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强,可是执行Python代码的功能和CPython是彻底同样的。比如不少国产浏览器虽然外观不一样,但内核其实都是调用了IE。
CPython用>>>
做为提示符,而IPython用In [
序号
]:
做为提示符。
PyPy是另外一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),因此能够显著提升Python代码的执行速度。
绝大部分Python代码均可以在PyPy下运行,可是PyPy和CPython有一些是不一样的,这就致使相同的Python代码在两种解释器下执行可能会有不一样的结果。若是你的代码要放到PyPy下执行,就须要了解PyPy和CPython的不一样点。
Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行。
IronPython和Jython相似,只不过IronPython是运行在微软.Net平台上的Python解释器,能够直接把Python代码编译成.Net的字节码。
小结:
2、python基础初识
建立一个test1.py文件内容是:
1 print("well begun is half done.") 2 print("好的开始是成功的一半。\n")
打开windows命令行输入cmd,肯定后 写入代码python d:\test1.py
您已经运行了第一个python程序, 即:终端---->cmd-----> python 文件路径。 回车搞定~
上一步中执行 python d:test1.py 时,明确的指出 t1.py 脚本由 python 解释器来执行。
若是想要相似于执行shell脚本同样执行python脚本,例: ./test1.py
,那么就须要在文件的头部指定解释器,以下:
1 #!/usr/bin/env python
如此一来,执行: ./test1.py
便可。
ps:执行前需给予test1.py 执行权限,chmod 755 test1.py
python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII),而python3对内容进行编码的默认为utf-8。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其余西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,因此,ASCII码最多只能表示 256 个符号。
Bin(二进制)
|
Oct(八进制) |
Dec(十进制)
|
Hex(十六进制)
|
缩写/字符
|
解释
|
0000 0000
|
0
|
0
|
00
|
NUL(null)
|
空字符
|
0000 0001
|
1
|
1
|
01
|
SOH(start of headline)
|
标题开始
|
0000 0010
|
2
|
2
|
02
|
STX (start of text)
|
正文开始
|
0000 0011
|
3
|
3
|
03
|
ETX (end of text)
|
正文结束
|
0000 0100
|
4
|
4
|
04
|
EOT (end of transmission)
|
传输结束
|
0000 0101
|
5
|
5
|
05
|
ENQ (enquiry)
|
请求
|
0000 0110
|
6
|
6
|
06
|
ACK (acknowledge)
|
收到通知
|
0000 0111
|
7
|
7
|
07
|
BEL (bell)
|
响铃
|
0000 1000
|
10
|
8
|
08
|
BS (backspace)
|
退格
|
0000 1001
|
11
|
9
|
09
|
HT (horizontal tab)
|
水平制表符
|
0000 1010
|
12
|
10
|
0A
|
LF (NL line feed, new line)
|
换行键
|
0000 1011
|
13
|
11
|
0B
|
VT (vertical tab)
|
垂直制表符
|
0000 1100
|
14
|
12
|
0C
|
FF (NP form feed, new page)
|
换页键
|
0000 1101
|
15
|
13
|
0D
|
CR (carriage return)
|
回车键
|
0000 1110
|
16
|
14
|
0E
|
SO (shift out)
|
不用切换
|
0000 1111
|
17
|
15
|
0F
|
SI (shift in)
|
启用切换
|
0001 0000
|
20
|
16
|
10
|
DLE (data link escape)
|
数据链路转义
|
0001 0001
|
21
|
17
|
11
|
DC1 (device control 1)
|
设备控制1
|
0001 0010
|
22
|
18
|
12
|
DC2 (device control 2)
|
设备控制2
|
0001 0011
|
23
|
19
|
13
|
DC3 (device control 3)
|
设备控制3
|
0001 0100
|
24
|
20
|
14
|
DC4 (device control 4)
|
设备控制4
|
0001 0101
|
25
|
21
|
15
|
NAK (negative acknowledge)
|
拒绝接收
|
0001 0110
|
26
|
22
|
16
|
SYN (synchronous idle)
|
同步空闲
|
0001 0111
|
27
|
23
|
17
|
ETB (end of trans. block)
|
结束传输块
|
0001 1000
|
30
|
24
|
18
|
CAN (cancel)
|
取消
|
0001 1001
|
31
|
25
|
19
|
EM (end of medium)
|
媒介结束
|
0001 1010
|
32
|
26
|
1A
|
SUB (substitute)
|
代替
|
0001 1011
|
33
|
27
|
1B
|
ESC (escape)
|
换码(溢出)
|
0001 1100
|
34
|
28
|
1C
|
FS (file separator)
|
文件分隔符
|
0001 1101
|
35
|
29
|
1D
|
GS (group separator)
|
分组符
|
0001 1110
|
36
|
30
|
1E
|
RS (record separator)
|
记录分隔符
|
0001 1111
|
37
|
31
|
1F
|
US (unit separator)
|
单元分隔符
|
0010 0000
|
40
|
32
|
20
|
(space)
|
空格
|
0010 0001
|
41
|
33
|
21
|
!
|
叹号 |
0010 0010
|
42
|
34
|
22
|
"
|
双引号 |
0010 0011
|
43
|
35
|
23
|
#
|
井号 |
0010 0100
|
44
|
36
|
24
|
$
|
美圆符 |
0010 0101
|
45
|
37
|
25
|
%
|
百分号 |
0010 0110
|
46
|
38
|
26
|
&
|
和号 |
0010 0111
|
47
|
39
|
27
|
'
|
闭单引号 |
0010 1000
|
50
|
40
|
28
|
(
|
开括号
|
0010 1001
|
51
|
41
|
29
|
)
|
闭括号
|
0010 1010
|
52
|
42
|
2A
|
*
|
星号 |
0010 1011
|
53
|
43
|
2B
|
+
|
加号 |
0010 1100
|
54
|
44
|
2C
|
,
|
逗号 |
0010 1101
|
55
|
45
|
2D
|
-
|
减号/破折号 |
0010 1110
|
56
|
46
|
2E
|
.
|
句号 |
00101111
|
57
|
47
|
2F
|
/
|
斜杠 |
00110000
|
60
|
48
|
30
|
0
|
数字0 |
00110001
|
61
|
49
|
31
|
1
|
数字1 |
00110010
|
62
|
50
|
32
|
2
|
数字2 |
00110011
|
63
|
51
|
33
|
3
|
数字3 |
00110100
|
64
|
52
|
34
|
4
|
数字4 |
00110101
|
65
|
53
|
35
|
5
|
数字5 |
00110110
|
66
|
54
|
36
|
6
|
数字6 |
00110111
|
67
|
55
|
37
|
7
|
数字7 |
00111000
|
70
|
56
|
38
|
8
|
数字8 |
00111001
|
71
|
57
|
39
|
9
|
数字9 |
00111010
|
72
|
58
|
3A
|
:
|
冒号 |
00111011
|
73
|
59
|
3B
|
;
|
分号 |
00111100
|
74
|
60
|
3C
|
<
|
小于 |
00111101
|
75
|
61
|
3D
|
=
|
等号 |
00111110
|
76
|
62
|
3E
|
>
|
大于 |
00111111
|
77
|
63
|
3F
|
?
|
问号 |
01000000
|
100
|
64
|
40
|
@
|
电子邮件符号 |
01000001
|
101
|
65
|
41
|
A
|
大写字母A |
01000010
|
102
|
66
|
42
|
B
|
大写字母B |
01000011
|
103
|
67
|
43
|
C
|
大写字母C |
01000100
|
104
|
68
|
44
|
D
|
大写字母D |
01000101
|
105
|
69
|
45
|
E
|
大写字母E |
01000110
|
106
|
70
|
46
|
F
|
大写字母F |
01000111
|
107
|
71
|
47
|
G
|
大写字母G |
01001000
|
110
|
72
|
48
|
H
|
大写字母H |
01001001
|
111
|
73
|
49
|
I
|
大写字母I |
01001010
|
112
|
74
|
4A
|
J
|
大写字母J |
01001011
|
113
|
75
|
4B
|
K
|
大写字母K |
01001100
|
114
|
76
|
4C
|
L
|
大写字母L |
01001101
|
115
|
77
|
4D
|
M
|
大写字母M |
01001110
|
116
|
78
|
4E
|
N
|
大写字母N |
01001111
|
117
|
79
|
4F
|
O
|
大写字母O |
01010000
|
120
|
80
|
50
|
P
|
大写字母P |
01010001
|
121
|
81
|
51
|
Q
|
大写字母Q |
01010010
|
122
|
82
|
52
|
R
|
大写字母R |
01010011
|
123
|
83
|
53
|
S
|
大写字母S |
01010100
|
124
|
84
|
54
|
T
|
大写字母T |
01010101
|
125
|
85
|
55
|
U
|
大写字母U |
01010110
|
126
|
86
|
56
|
V
|
大写字母V |
01010111
|
127
|
87
|
57
|
W
|
大写字母W |
01011000
|
130
|
88
|
58
|
X
|
大写字母X |
01011001
|
131
|
89
|
59
|
Y
|
大写字母Y |
01011010
|
132
|
90
|
5A
|
Z
|
大写字母Z |
01011011
|
133
|
91
|
5B
|
[
|
开方括号 |
01011100
|
134
|
92
|
5C
|
\
|
反斜杠 |
01011101
|
135
|
93
|
5D
|
]
|
闭方括号 |
01011110
|
136
|
94
|
5E
|
^
|
脱字符 |
01011111
|
137
|
95
|
5F
|
_
|
下划线 |
01100000
|
140
|
96
|
60
|
`
|
开单引号 |
01100001
|
141
|
97
|
61
|
a
|
小写字母a |
01100010
|
142
|
98
|
62
|
b
|
小写字母b |
01100011
|
143
|
99
|
63
|
c
|
小写字母c |
01100100
|
144
|
100
|
64
|
d
|
小写字母d |
01100101
|
145
|
101
|
65
|
e
|
小写字母e |
01100110
|
146
|
102
|
66
|
f
|
小写字母f |
01100111
|
147
|
103
|
67
|
g
|
小写字母g |
01101000
|
150
|
104
|
68
|
h
|
小写字母h |
01101001
|
151
|
105
|
69
|
i
|
小写字母i |
01101010
|
152
|
106
|
6A
|
j
|
小写字母j |
01101011
|
153
|
107
|
6B
|
k
|
小写字母k |
01101100
|
154
|
108
|
6C
|
l
|
小写字母l |
01101101
|
155
|
109
|
6D
|
m
|
小写字母m |
01101110
|
156
|
110
|
6E
|
n
|
小写字母n |
01101111
|
157
|
111
|
6F
|
o
|
小写字母o |
01110000
|
160
|
112
|
70
|
p
|
小写字母p |
01110001
|
161
|
113
|
71
|
q
|
小写字母q |
01110010
|
162
|
114
|
72
|
r
|
小写字母r |
01110011
|
163
|
115
|
73
|
s
|
小写字母s |
01110100
|
164
|
116
|
74
|
t
|
小写字母t |
01110101
|
165
|
117
|
75
|
u
|
小写字母u |
01110110
|
166
|
118
|
76
|
v
|
小写字母v |
01110111
|
167
|
119
|
77
|
w
|
小写字母w |
01111000
|
170
|
120
|
78
|
x
|
小写字母x |
01111001
|
171
|
121
|
79
|
y
|
小写字母y |
01111010
|
172
|
122
|
7A
|
z
|
小写字母z |
01111011
|
173
|
123
|
7B
|
{
|
开花括号 |
01111100
|
174
|
124
|
7C
|
|
|
垂线 |
01111101
|
175
|
125
|
7D
|
}
|
闭花括号 |
01111110
|
176
|
126
|
7E
|
~
|
波浪号 |
01111111
|
177
|
127
|
7F
|
DEL (delete)
|
删除
|
显然ASCII码没法将世界上的各类文字和符号所有表示,因此,就须要新出一种能够表明全部字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每一个字符设定了统一而且惟一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他再也不使用最少使用2个字节,而是将全部的字符和符号进行分类:
因此,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII),若是是以下代码的话:
报错:ascii码没法表示中文
1 #!/usr/bin/env python 2 3 print("你好,世界")
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 print "你好,世界"
当行注释:# 被注释内容
多行注释:'''被注释内容''',或者"""被注释内容"""
变量是什么? 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。
5.一、声明变量
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name = "taibai"
上述代码声明了一个变量,变量名为: name,变量name的值为:"taibai"
变量的做用:昵称,其代指内存里某个地址中保存的内容
5.二、变量定义的规则:
5.三、推荐定义方式
1 #驼峰体 2 PriceOfStock = 12.56 3 NumberOfStock = 25
1 #下划线 2 price_of_stock = 12.56 3 number_of_stock = 25
你以为哪一种更清晰,哪一种就是官方推荐的,我想你确定会先第2种,第一种AgeOfOldboy咋一看觉得是AngelaBaby
5.四、变量的赋值
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name1 = "wupeiqi" 5 name2 = "alex"
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name1 = "taibai" 5 name2 = name1
5.五、定义变量很差的方式举例
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程当中不会改变的量
举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些状况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法表明常量,程序员约定俗成用变量名所有大写表明常量
AGE_OF_OLDBOY = 56
在c语言中有专门的常量定义语法,
const int count = 60;
一旦定义为常量,更改即会报错
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 #将用户输入的内容赋值给name变量 5 name = input("请输入用户名:") 6 7 #打印输入的内容 8 print(name)
执行脚本就会发现,程序会等待你输入姓名后再往下继续走。
可让用户输入多个信息,以下
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name = inpput("What is your name?") 5 age = input("How old are you?") 6 hometown = input("Where is your hometown?") 7 8 print("Hello ", name , ", your are ", age , " years old, you came from ", hometown)
什么是数据类型?
咱们人类能够很容易的分清数字与字符的区别,可是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,不然它是分不清1和‘汉’的区别的,所以,在每一个编程语言里都会有一个叫数据类型的东东,其实就是对经常使用的各类数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中经常使用的数据类型有多种,今天咱们暂只讲3种, 数字、字符串、布尔类型
8.一、整数类型(int)
int(整型)
long(长整型)
跟C语言不一样,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上因为机器内存有限,咱们使用的长整数数值不可能无限大。
注意,自从Python2.2起,若是整数发生溢出,Python会自动将整数数据转换为长整数,因此现在在长整数数据后面不加字母L也不会致使严重后果了。
注意:在Python3里再也不有long类型了,全都是int
1 >>> a = 2**64 2 >>> type(a) #type()是查看数据类型的方法 3 <type 'long'> 4 >>> 5 >>> b = 2**10 6 >>> type(b) 7 <type 'int'>
除了int和long以外, 其实还有float浮点型, 复数型
8.二、字符串类型(str)
在Python中,加了引号的字符都被认为是字符串!
1 >>> name = "Alex Li" #双引号 2 >>> age = "22" #只要加引号就是字符串 3 >>> age1 = 25 #int 4 >>> 5 >>> msg = '''My name is Tom, I am 15 years old!''' #三个引号也能够 6 >>> 7 >>> hometown = 'BeiJing' #单引号也能够 8 >>>
那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种状况 你须要考虑单双的配合
msg = "My name is Alex , I'm 22 years old!"
多引号什么做用呢?
多行字符串最好用多引号
1 >>> message = ''' ⽂能提笔安天下, 2 武能上⻢定乾坤. 3 ⼼存谋略何⼈胜, 4 古今英雄惟是君. 5 ''' 6 >>> print(message) 7 ⽂能提笔安天下, 8 武能上⻢定乾坤. 9 ⼼存谋略何⼈胜, 10 古今英雄惟是君.
字符串拼接
数字能够进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
1 >>> color = "red" 2 >>> fruit = " Apple" 3 >>> color + fruit #相加其实就是简单拼接 4 'red Apple' 5 >>> 6 >>> color * 8 #相乘其实就是复制本身多少次,在拼接在一块儿 7 'redredredredredredredred' 8 >>>
注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接
1 >>> type(color),type(fruit) 2 (<class 'str'>, <class 'str'>) 3 >>> 4 >>> color 5 'red' 6 >>> number = 10 7 >>> color + number 8 Traceback (most recent call last): 9 File "<pyshell#18>", line 1, in <module> 10 color + number 11 TypeError: must be str, not int 12 >>>
8.三、布尔值(True,False)
布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断
但其实大家并不明白对么? let me explain, 我如今有2个值 , a=3, b=5 , 我说a>b你说成立么? 咱们固然知道不成立,但问题是计算机怎么去描述这成不成立呢?或者说a< b是成立,计算机怎么描述这是成立呢?
没错,答案就是,用布尔类型
1 >>> a = 3 2 >>> b = 5 3 >>> 4 >>> a > b #不成立就是False,即假 5 False 6 >>> 7 >>> a < b #成立就是True,即真 8 True 9 >>>
现有一练习需求,问商品的名称、价格、产地、生产日期 ,而后打印成如下格式
1 ------------------------- infor of Mi 8 phone ------------------
2 Name : Mi 8 phone
3 Price : 2299
4 Location : Made in China
5 Date : 2018-05-16
6 ------------------------ end -----------------------------------
你怎么实现呢?你会发现,用字符拼接的方式还难实现这种格式的输出,因此一块儿来学一下新姿式
只须要把要打印的格式先准备好, 因为里面的 一些信息是须要用户输入的,你没办法预设知道,
所以能够先放置个占位符,再把字符串里的占位符与外部的变量作个映射关系就好
1 name = input("请输入商品名称:") 2 price = input("请输入商品价格:") 3 loc = input("请输入商品产地:") 4 date = input("请输入商品生产日期:") 5 6 infor = ''' 7 ------------------------ infor of %s ------------------- #这里的每一个%s就是一个占位符,本行的表明 后面括号的 name 8 Name : %s #表明 name 9 Price : %s #表明 price 10 Location : %s #表明 loc 11 Date : %s #表明 date 12 ------------------------ end ----------------------------------- 13 '''%(name, name, price, loc, date) #这行的 %号就是把前面的 字符串 与 括号 后面的变量关联起来 14 15 print(infor)
%s就是表明字符串占位符,除此以外,还有%d,是数字占位符, 若是把上面的Price后面的换成%d,就表明你必须只能输入数字啦
Price : %d
1 >>> 2 ===================== 3 请输入商品名称:Mi 8 phone 4 请输入商品价格:2299 5 请输入商品产地:Made in China 6 请输入商品生产日期:2018-05-16 7 Traceback (most recent call last): 8 File "E:/Python/day1/test11.py", line 13, in <module> 9 '''%(name, name, price, loc, date) #这行的 %号就是把前面的 字符串 与 括号 后面的变量关联起来 10 TypeError: %d format: a number is required, not str 11 >>>
咱们运行一下,可是发现出错了。。。
说%d须要一个数字,而不是str, what? 咱们明明输入的是数字呀,2299,2299呀。
不用担忧 ,不要相信你的眼睛咱们调试一下,看看输入的究竟是不是数字呢?怎么看呢?查看数据类型的方法是什么来着?type()
1 name = input("Name:") 2 age = input("Age:") 3 print(name, type(name)) 4 print(age, type(age))
执行输出是
1 Name:Steven 2 Age:16 3 Steven <class 'str'> 4 16 <class 'str'>
让我大声告诉你,input接收的全部输入默认都是字符串格式!
要想程序不出错,那怎么办呢?简单,你能够把str转成int
1 age = int(input("Age:")) 2 print(type(age))
确定没问题了。相反,能不能把字符串转成数字呢?必然能够,str( yourStr )
问题:如今有这么行代码
1 msg = "我是%s, 年龄%d, 目前学习进度为20%" % ("Alice", 18) 2 print(msg)
这样会报错的,由于在格式化输出里,你出现%默认为就是占位符的%,
可是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?
1 msg = "我是%s, 年龄%d, 目前学习进度为20%%" % ("Alice", 18) 2 print(msg)
这样就能够了,第一个%是对第二个%的转义,告诉Python解释器这只是一个单纯的%,而不是占位符。
运算符
计算机能够进行的运算有不少种,可不仅加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天咱们暂只学习算数运算、比较运算、逻辑运算、赋值运算、成员运算
算数运算
如下假设变量:a=10,b=20
比较运算
如下假设变量:a=10,b=20
赋值运算
如下假设变量:a=10,b=20
逻辑运算
针对逻辑运算的进一步研究:
1,在没有()的状况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。
例题:
判断下列逻辑语句的True,False。
1 3>4 or 4<3 and 1==1 2 1 < 2 and 3 < 4 or 1>2 3 2 > 1 and 3 < 4 or 4 > 5 and 2 < 1 4 1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8 5 1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 6 not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
2 , x or y , x为真,值就是x,x为假,值是y;
x and y, x为真,值是y,x为假,值是x。
例题:求出下列逻辑语句的值。
1 8 or 4 2 0 and 3 3 0 or 4 and 3 or 7 or 9 and 6
成员运算:
除了以上的一些运算符以外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
判断子元素是否在原字符串(字典,列表,集合)中:
例如:
1 print('day' in 'What a wonderful day!') 2 print('Hello' in 'hello world') 3 print('woman' not in 'It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.')
Python运算符优先级
如下表格列出了从最高到最低优先级的全部运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
假如把写程序比作走路,那咱们到如今为止,一直走的都是直路,还没遇到过度叉口,想象现实中,你遇到了分叉口,而后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,若是咱们想让程序也能处理这样的判断怎么办? 很简单,只须要在程序里预设一些条件判断语句,知足哪一个条件,就走哪条岔路。这个过程就叫流程控制。
if...else 语句
单分支
if 条件: 知足条件后要执行的代码
双分支
''' if condition: statement else: statement ''' AgeOfPerson = 36 if AgeOfPerson > 60: print("Too old, time to retire..") else: print("还能折腾几年”)
缩进
这里必需要插入这个缩进的知识点
你会发现,上面的if代码里,每一个条件的下一行都缩进了4个空格,这是为何呢?
这就是Python的一大特点,强制缩进,目的是为了让程序知道,每段代码依赖哪一个条件,若是不经过缩进来区分,程序怎么会知道,当你的条件成立后,去执行哪些代码呢?
在其它的语言里,大多经过{}
来肯定代码块,好比C,C++,Java,Javascript都是这样,看一个JavaScript代码的例子
1 var age = 56 2 if ( age < 60){ 3 console.log("还能折腾!") 4 console.log('能够执行多行代码!') 5 }else{ 6 console.log('该退休啦!') 7 }
在有{}
来区分代码块的状况下,缩进的做用就只剩下让代码变的整洁了。
Python是门超级简洁的语言,发明者定是以为用{}
太丑了,因此索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。
Python的缩进有如下几个原则:
多分支
回到流程控制上来,if...else ...能够有多个分支条件
if condition: statement elif condition: statement elif condition: statement elif condition: statement else: statement
写个猜年龄的游戏吧
1 age = 26 2 3 guess = int(input(">>:")) 4 5 if guess > age: 6 print("太大啦,往小了猜!") 7 elif guess < age: 8 print("过小啦,往大了猜!") 9 else: 10 print("恭喜你,猜对了!")
上面的例子,根据你输入的值不一样,会最多获得3种不一样的结果
再来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系以下
A 90-100 B 80-89 C 60-79 D 40-59 E 0-39
要求用户输入0-100的数字后,你能正确打印他的对应成绩
1 score = int(input("请输入分数:") 2 3 if score > 100: 4 print("我擦,最高分才100...") 5 elif score >= 90: 6 print('A') 7 elif score >= 80: 8 print('B') 9 elif score >= 60: 10 print('C') 11 elif score >= 40: 12 print('D') 13 else: 14 print('E')
这里有个问题,就是当我输入95的时候 ,它打印的结果是A,可是95 明明也大于第二个条件elif score >=80:
呀, 为何不打印B呢?
这是由于代码是从上到下依次判断,只要知足一个,就不会再往下走啦,这一点必定要清楚呀!
12.1,基本循环
while condition: #Loop # if condition is True, Loop run # if condition is False, Loop don't run
12.2,循环停止语句
若是在循环的过程当中,由于某些缘由,你不想继续循环了,怎么把它停止掉呢?这就用到break 或 continue 语句
例子:break
1 count = 0 2 while count <= 100: #只要count <= 100就不断的执行下面的代码 3 print("loop ", count) 4 if count == 6: 5 break 6 count += 1 #没执行一次,就把count+1, 要否则就变成死循环啦,由于count 一直是0 7 print("---------- end of while loop -------------")
输出
1 loop 0 2 loop 1 3 loop 2 4 loop 3 5 loop 4 6 loop 5 7 loop 6 8 ---------- end of while loop -------------
例子:continue
1 count = 0 2 while count <= 100: 3 count += 1 4 if count > 5 and count < 95: #只要count 在6-94之间,就不走print语句,直接进入下一次loop 5 continue 6 print("loop", count") 7 print("----------- end of while loop ----------------")
输出
1 loop 1 2 loop 2 3 loop 3 4 loop 4 5 loop 5 6 loop 95 7 loop 96 8 loop 97 9 loop 98 10 loop 99 11 loop 100 12 loop 101 13 ----------- end of while loop ----------------
12.三、while ... else ..
与其它语言else 通常只与if 搭配不一样,在Python 中还有个while ...else 语句
while 后面的else 做用是指,当while 循环正常执行完,中间没有被break 停止的话,就会执行else后面的语句
1 count = 0 2 while count <= 5: 3 count +=1 4 print("Loop", count) 5 else: 6 print("循环正常执行完啦!") 7 print("---------- end of while loop -------------")
输出
1 Loop 1 2 Loop 2 3 Loop 3 4 Loop 4 5 Loop 5 6 Loop 6 7 循环正常执行完啦! 8 ---------- end of while loop -------------
若是执行过程当中被break啦,就不会执行else的语句啦
1 count = 0 2 while count <= 5: 3 count +=1 4 if count == 4: 5 break 6 print("Loop", count) 7 else: 8 print("循环正常执行完啦!") 9 print("---------- end of while loop -------------")
1 Loop 1 2 Loop 2 3 Loop 3 4 ---------- end of while loop -------------