python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
(龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到现在,依然掌握着Python发展的核心方向,被称为仁慈的独裁者)。

2017年7月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
目前Python主要应用领域:
Python在一些公司的应用:
python发展史
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
2.1 编译型与解释型。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)


编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
2.2动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
2.3强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。
先看优点
再看缺点:
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
CPython
当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
windows下安装Python(手动添加环境变量)以2.7版本举例:
windows:
| 1 2 3 4 5 6 7 | 1、下载安装包    https://www.python.org/downloads/2、安装    默认安装路径:C:\python273、配置环境变量    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】    如:原来的值;C:\python27,切记前面有分号 | 
windows下安装Python(自动添加环境变量)以3,.5版本的举例:
1,官网下载:https://www.python.org/downloads/windows/
2,选择版本。

3,自动添加环境变量。

4,更改完成。

5,点击安装即可。
linux:
| 1 2 3 | 无需安装,原装Python环境 ps:如果自带2.6,请更新至2.7 | 
在d盘下创建一个t1.py文件内容是:
print(‘hello world‘)
打开windows命令行输入cmd,确定后 写入代码python d:t1.py


您已经运行了第一个python程序, 即:终端---->cmd-----> python 文件路径。 回车搞定~
上一步中执行 python d:t1.py 时,明确的指出 t1.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./t1.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:
| 1 2 3 | #!/usr/bin/env python print"hello,world" | 
如此一来,执行: ./t1.py 即可。
ps:执行前需给予t1.py 执行权限,chmod 755 t1.py
python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),而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个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
| 1 2 3 | #!/usr/bin/env python print"你好,世界" | 
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
| 1 2 3 4 | #!/usr/bin/env python# -*- coding: utf-8 -*- print"你好,世界" | 
当行注释:# 被注释内容
多行注释:‘‘‘被注释内容‘‘‘,或者"""被注释内容"""
变量是什么? 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。
5.1、声明变量
| 1 2 3 4 | #!/usr/bin/env python# -*- coding: utf-8 -*- name ="taibai" | 
上述代码声明了一个变量,变量名为: name,变量name的值为:"taibai"
变量的作用:昵称,其代指内存里某个地址中保存的内容

5.2、变量定义的规则:
5.3、推荐定义方式
#驼峰体
AgeOfOldboy = 56
NumberOfStudents = 80
#下划线
age_of_oldboy = 56
number_of_students = 80
你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种,第一种AgeOfOldboy咋一看以为是AngelaBaby
5.4、变量的赋值
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "wupeiqi"
name2 = "alex"

#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "taibai"
name2 = name1
 
5.5、定义变量不好的方式举例
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56
在c语言中有专门的常量定义语法,
const int count = 60;一旦定义为常量,更改即会报错
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
# 将用户输入的内容赋值给 name 变量
name = input("请输入用户名:")
  
# 打印输入的内容
print(name)
执行脚本就会发现,程序会等待你输入姓名后再往下继续走。
可以让用户输入多个信息,如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input("What is your name?")
age = input("How old are you?")
hometown = input("Where is your hometown?")
print("Hello ",name , "your are ", age , "years old, you came from",hometown)
什么是数据类型?
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型
8.1、整数类型(int)。
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a)  #type()是查看数据类型的方法
<type ‘long‘>
>>> b = 2**60
>>> type(b)
<type ‘int‘>
除了int和long之外, 其实还有float浮点型, 复数型,但今天先不讲啦
8.2、字符串类型(str)。
在Python中,加了引号的字符都被认为是字符串!
>>> name = "Alex Li" #双引号
>>> age = "22"       #只要加引号就是字符串
>>> age2 = 22          #int
>>> 
>>> msg = ‘‘‘My name is Alex, I am 22 years old!‘‘‘  #我擦,3个引号也可以
>>> 
>>> hometown = ‘ShanDong‘   #单引号也可以
那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is Alex , I‘m 22 years old!"
多引号什么作用呢?作用就是多行字符串必须用多引号
msg = ‘‘‘
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
‘‘‘
print(msg)
字符串拼接
数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
>>> name
‘Alex Li‘
>>> age
‘22‘
>>> 
>>> name + age  #相加其实就是简单拼接
‘Alex Li22‘
>>> 
>>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起
‘Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li‘
注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接
>>> type(name),type(age2)
(<type ‘str‘>, <type ‘int‘>)
>>> 
>>> name
‘Alex Li‘
>>> age2
22
>>> name + age2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate ‘str‘ and ‘int‘ objects #错误提示数字 和 字符 不能拼接
8.3、布尔值(True,False)。
布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断
但其实你们并不明白对么? let me explain, 我现在有2个值 , a=3, b=5 , 我说a>b你说成立么? 我们当然知道不成立,但问题是计算机怎么去描述这成不成立呢?或者说a< b是成立,计算机怎么描述这是成立呢?
没错,答案就是,用布尔类型
>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False,即假
False
>>> 
>>> a < b #成立就是True, 即真
True
现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Alex Li -----------
Name  : Alex Li
Age   : 22
job   : Teacher
Hobbie: girl
------------- end -----------------
你怎么实现呢?你会发现,用字符拼接的方式还难实现这种格式的输出,所以一起来学一下新姿势
只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预设知道,因此可以先放置个占位符,再把字符串里的占位符与外部的变量做个映射关系就好啦
name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")
info = ‘‘‘
------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的代表 后面拓号里的 name 
Name  : %s  #代表 name 
Age   : %s  #代表 age  
job   : %s  #代表 job 
Hobbie: %s  #代表 hobbie 
------------- end -----------------
‘‘‘ %(name,name,age,job,hobbie)  # 这行的 % 号就是 把前面的字符串 与拓号 后面的 变量 关联起来 
print(info)
%s就是代表字符串占位符,除此之外,还有%d,是数字占位符, 如果把上面的age后面的换成%d,就代表你必须只能输入数字啦
age     : %d
我们运行一下,但是发现出错了。。。
说%d需要一个数字,而不是str, what? 我们明明输入的是数字呀,22,22呀。
不用担心 ,不要相信你的眼睛我们调试一下,看看输入的到底是不是数字呢?怎么看呢?查看数据类型的方法是什么来着?type()
name = input("Name:")
age = input("Age:")
print(type(age))
执行输出是
Name:Alex
Age:22
<class ‘str‘> #怎么会是str
Job:IT
让我大声告诉你,input接收的所有输入默认都是字符串格式!
要想程序不出错,那怎么办呢?简单,你可以把str转成int
age = int(  input("Age:")  )
print(type(age))
肯定没问题了。相反,能不能把字符串转成数字呢?必然可以,str( yourStr )
问题:现在有这么行代码
msg = "我是%s,年龄%d,目前学习进度为80%"%(‘金鑫‘,18)
print(msg)
这样会报错的,因为在格式化输出里,你出现%默认为就是占位符的%,但是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?
msg = "我是%s,年龄%d,目前学习进度为80%%"%(‘金鑫‘,18)
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。
 
例题:求出下列逻辑语句的值。
8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6
in,not in :
判断子元素是否在原字符串(字典,列表,集合)中:
例如:
#print(‘喜欢‘ in ‘dkfljadklf喜欢hfjdkas‘)
#print(‘a‘ in ‘bcvd‘)
#print(‘y‘ not in ‘ofkjdslaf‘)
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样的判断怎么办? 很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。
if...else 语句
单分支
if 条件:
    满足条件后要执行的代码
双分支
"""
if 条件:
    满足条件执行代码
else:
    if条件不满足就走这段
"""
AgeOfOldboy = 48
if AgeOfOldboy > 50 :
    print("Too old, time to retire..")
else:
    print("还能折腾几年!")
缩进
这里必须要插入这个缩进的知识点
你会发现,上面的if代码里,每个条件的下一行都缩进了4个空格,这是为什么呢?这就是Python的一大特色,强制缩进,目的是为了让程序知道,每段代码依赖哪个条件,如果不通过缩进来区分,程序怎么会知道,当你的条件成立后,去执行哪些代码呢?
在其它的语言里,大多通过{}来确定代码块,比如C,C++,Java,Javascript都是这样,看一个JavaScript代码的例子
var age = 56
if ( age < 50){
  console.log("还能折腾")
    console.log(‘可以执行多行代码‘)
}else{
   console.log(‘太老了‘)
}
在有{}来区分代码块的情况下,缩进的作用就只剩下让代码变的整洁了。
Python是门超级简洁的语言,发明者定是觉得用{}太丑了,所以索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。
Python的缩进有以下几个原则:
多分支
回到流程控制上来,if...else ...可以有多个分支条件
if 条件:
    满足条件执行代码
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个    
else:
    上面所有的条件不满足就走这段
写个猜年龄的游戏吧
age_of_oldboy = 48
guess = int(input(">>:"))
if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")
else:
    print("恭喜你,猜对了...")
上面的例子,根据你输入的值不同,会最多得到3种不同的结果
再来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系如下
A    90-100
B    80-89
C    60-79
D    40-59
E    0-39
要求用户输入0-100的数字后,你能正确打印他的对应成绩
score = int(input("输入分数:"))
if score > 100:
    print("我擦,最高分才100...")
elif score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 60:
    print("C")
elif score >= 40:
    print("D")
else:
    print("太笨了...E")
这里有个问题,就是当我输入95的时候 ,它打印的结果是A,但是95 明明也大于第二个条件elif score >=80:呀, 为什么不打印B呢?这是因为代码是从上到下依次判断,只要满足一个,就不会再往下走啦,这一点一定要清楚呀!
12.1,基本循环
| while条件:        # 循环体    # 如果条件为真,那么循环体则执行    # 如果条件为假,那么循环体不执行 | 
12.2,循环中止语句
如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue 语句
例子:break
count = 0
while count <= 100 : #只要count<=100就不断执行下面的代码
    print("loop ", count)
    if count == 5:
        break
    count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0
print("-----out of while loop ------")
输出
loop  0
loop  1
loop  2
loop  3
loop  4
loop  5
-----out of while loop ------
例子:continue
count = 0
while count <= 100 : 
    count += 1
    if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop
        continue 
    print("loop ", count)
print("-----out of while loop ------")
输出
loop  1
loop  2
loop  3
loop  4
loop  5
loop  95
loop  96
loop  97
loop  98
loop  99
loop  100
loop  101
-----out of while loop ------
12.3,while ... else ..
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句
while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------
如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------
1、使用while循环输入 1 2 3 4 5 6 8 9 10
2、求1-100的所有数的和
3、输出 1-100 内的所有奇数
4、输出 1-100 内的所有偶数
5、求1-2+3-4+5 ... 99的所有数的和
6、用户登陆(三次机会重试)
原文:https://www.cnblogs.com/yaoguais/p/8805881.html