1、数字和表达式
什么是表达式,1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1、2、3叫做操作数。1+2*3 经过计算后得到的结果是7,就1+2*3 = 7。我们可以将计算结果保存在一个变量里,ret = 1-2*3 。 所以表达式就是由操作数和运算符组成的一句代码或语句,表达式可以求值,可以放在“=”的右边,用来给变量赋值。
计算运算符号:+、-、*、/、%、**
赋值运算符: = 、+= -= *= /= %= //= **=
比较运算符:>、 <、 >=、 <=、 ==、!=
逻辑运算符: not 、and、 or
逻辑运算符是用来做逻辑计算的。像我们上面用到的比较运算符,每一次比较其实就是一次条件判断,都会相应的得到一个为True或False的值。而逻辑运算符的的操作数就是一个用来做条件判断的表达式或者变量。
成员运算符: not in 、in (判断某个单词里是不是有某个字母)
成员运算符用来判断一个元素是否是另一个元素的成员。 比如说我们可以判断 “hello” 中是否有 “h”, 得到的结果也是True 或者 False。
身份运算符: is、is not
这里我们首先将123456赋值给a,后有将a赋值给b, 这样其实是 a和b 的值都是123456, 但是后面d的值也是123456,为什么 第一次a is b 的结果为True ,d和 a 的结果为False 呢?
原因是这样的: 我们知道程序是运行在内存里的,第一次 我们将123456赋值给a的时候,其实是在内存里开辟了一块空间,将123456放在这块空间里,为了找到这里的123456, 会有一个指向这块空间的地址,这个地址叫做内存地址,是123456存储在内存中的地址。a其实指向的就是存储123456的内存空间的地址。执行了b=a,就是让b指向的地址和a一样。之后我们执行了 d = 123456 ,这里就会再开辟一块内存空间,并将指向该空间的内存地址赋值给d ,这样的话 ,a和b 指向的是同一个123456, d 指向的是另外一个123456 。
位运算符:
先了解一个概念:
我们平时用到的数字在计算机中是以二进制表示的, 这个二进制数叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如:十进制中的数 +7 ,计算机字长为8位,转换成二进制就是00000111。如果是 -7 ,就是 10000111 。那么,这里的 00000111 和 10000111 就是机器数。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
11111111 到 01111111 即 -127 到 127
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
我们设置a=234 (二进制为 11101010), b=44 (二进制为 101100)
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
^ 按位异或运算符:当两对应的二进位相异时,结果为1
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
a = 10000000 = 128
~a
result: 01111111 = 127
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
a = 10110011 = 179
a << 2
result: 1011001100
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数
a = 10110011 = 179
a >> 2
result: 00101100 = 44
位运算符一般用于二进制操作,一般用于底层,我们很少用,知道就可以了。
2、八进制和十六进制
在Python中,十六进制数应该像下面这样书写:
八进制数应该这样书写:
3、变量
变量(variable)是另外一个需要熟知的概念。Python中的变量很好理解。变量基本上就是代表(或者引用)某值得名字。举例来说,如果希望用名字x代表5,只需要执行下面的语句即可:
这样的操作称为赋值(assignment),数值5被赋给了变量x。另外一个说法就是:将变量x绑定到了值(或者对象)5上面。在变量被赋值之后,就可以在表达式中使用变量。
变量的命名规则:
变量名只能是 字母、数字或下划线的任意组合;
变量名的第一个字符不能是数字;
变量是区分大小写的;
约定俗成的一些规则,变量名称应该有意义、不要用中文做变量名、不要使用拼音;
关键字不能声明为变量名。
4、注释
程序很长的时候,不弄明白代码就不知道代码是什么的,这个时候怎么办?
我们看书的时候,有不懂的地方,我们一般都会标注一下。
我们写程序也一样,我在代码旁边标注一下是不是就很方便了。
注释有两种方式:
单行注释 #
多行注释 """ 内容"""
作用:
避免自己忘了写的代码是做什么的;
写给人看的;
不要去注释你代码做了什么,而要去 注释 我的代码为什要这么做。
Linux/Unix用户需要注意的内容:
特殊的注释:
在某些Python文件中我们会看到文件的第一行是
#!/usr/bin/env python
这一行是一个特殊的注释,他有特殊的作用,被称为Shebang,一般在linux/Unix中出现。
Shebang是一个由 “#” 和 “!” 构成的字符串行(#!),她出现在文件的第一行。当文件中出现Shebang 时,Linux/Unix 操作系统的的程序载入器会分析Shebang的内容,将之后的内容作为解释器命令,并调用该执行,将载有Shebang的文件路径作为解释器的参数。
在这里 #! 先用于帮助内核找到Python解释器,但是在导入模块的时候将会被忽略,因此,只有在直接执行的文件才有必要加入#! 。
5、字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
6、获取用户输入
在编写程序的时候,并不需要知道变量的具体指。当然,解释器最终还是得知道变量的值。可是,它怎么能知道这个值呢?解释器只知道我们告诉它的内容。
事实上,我们通过编写程序让别人用,我们无法预测用户会给程序提供什么值。那么,看看非常有用的input函数吧。
7、Python类型转换
函数 描述
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
例如:如果要将2个输入的变量相乘,必须进行类型转换。
8、流程控制之if语句
我们知道了如何获取用户输入,现在要写一个猜数字的游戏,我们想一下,首先我们的程序运行起来,然后让用户输入数字,之后程序判断用户输入的数字是否正确,并返回判断结果。
这里就需要用到if语句来进行判断。if语句的结构是:
if 判断条件: 执行语句…… var = input("Enter:") if var == "A": print("True")
注意:
缩进——推荐四个空格 (使用2个、3个空格或者tab都是可以得)
不要tab与空格混用
不同软件对空格的显示逻辑总是一样的,但是对于tab却五花八门。
有的软件把Tab展开成空格,有的不会展开。有的Tab宽度是4,有的宽度是8,
这些不一致会使得代码混乱,尤其是靠缩进表示块结构的Python。
我们继续编写我们的猜数字游戏。
前面我们写的猜数字游戏,只有在用户输入正确的时候,才会有提示,那输入错误的时候,是不是也应该提示?
这里就需要用到if-else语句
if语句 if 判断条件: 执行语句…… else: 执行语句……
if 语句的流程图
if语句共有三种结构
9、流程控制之while循环
现在有一个需求,要求从1到10,打印10个数字,可以用以下方法实现:
Python要实现循环功能,代码就是按照上述的方法来写。
嵌套循环
如果我想实现这个功能,在控制台上打印10行数字,每行有5列,分别是1,2,3,4,5,该如何实现呢?
实现代码如下:
输出结果如下:
break语句
我们换个需要,上述打印10行5列数字中,我想在打印第3行数字后,就退出循环,该如果实现呢?
实现代码如下:
输出结果如下:
这里要使用break语句,break语句会终端当前循环。
continue语句
现在,在10行5列的数字矩阵里,我只想打印1,2,3,5列,该如何实现呢?
输出结果如下:
这里要使用continue语句,continue语句的作用是退出当前循环,继续执行下次循环。