一、第一句Python代码
在 /home/dev/ 目录下创建 hello.py 文件,内容如下:
1 |
|
执行 hello.py 文件,即: python /home/dev/hello.py
python内部执行过程如下:
二、解释器
上一步中执行 python /home/dev/hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py
,那么就需要在 hello.py 文件的头部指定解释器,如下:
1 2 3 |
|
如此一来,执行: ./hello.py
即可。
ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py
三、内容编码
1. python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
显然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 |
|
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 2 3 4 |
|
2.
UTF-8 中文是占三个字节, GBK是两个字节
四、注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """ 或 ''' 被注释内容 '''
五、执行脚本传入参数
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
1 2 3 4 5 6 |
|
六、 pyc 文件
执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。
七、变量
1、声明变量
1 2 3 4 |
|
上述代码声明了一个变量,变量名为: name,变量name的值为:"wyf"
变量的作用:昵称,其代指内存里某个地址中保存的内容
变量定义的规则:
2、变量的赋值
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "wyf"
name2 = "quantum"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "wyf"
name2 = name1
八 、表达式和运算符
什么是表达式?
1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1、2、3叫做操作数。1+2*3 经过计算后得到的结果是7,就1+2*3 = 7。我们可以将计算结果保存在一个变量里,ret = 1-2*3 。 所以表达式就是由操作数和运算符组成的一句代码或语句,表达式可以求值,可以放在“=”的右边,用来给变量赋值。
算数运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
*按位取反运算规则(按位取反再加1)
运算符优先级:
运算练习列子
1. 算术运算符 : + - * / //(取整除) %(取余) **
>>> 2+3
>>> 3-2
>>> 2*3
>>> 5/2
2.5
>>> 5//2
>>> 5%2
>>> 2**3
2. 赋值运算符: = 、+= -= *= /= %= //= **=
>>> num = 2
>>> num += 1 # 等价于 num = num + 1
>>> num -= 1 # 等价于 num = num - 1
>>> num *= 1 # 等价于 num = num * 1
>>> num /= 1 # 等价于 num = num / 1
>>> num //= 1 # 等价于 num = num // 1
>>> num %= 1 # 等价于 num = num % 1
>>> num **= 2 # 等价于 num = num ** 2
3. 比较运算符:>、 <、 >=、 <=、 ==、!= True False简单讲一下
顾名思义,比较运算符是用来做比较的,比较的结果会有两种,分别是成立和不成立,成立的时候,结果是 True,不成立的时候结果是False。 True和False 用来表示比较后的结果。
>>> a = 5
>>> b = 3
>>> a > b # 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。
True
>>> a < b # 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。
False
>>> a <= b # 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。
False
>>> a >= b # 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。
True
>>> a == b # 检查,两个操作数的值是否相等,如果是则条件变为真。
False
>>> a != b # 检查两个操作数的值是否相等,如果值不相等,则条件变为真。
True
4. 逻辑运算符: not 、and、 or
逻辑运算符是用来做逻辑计算的。像我们上面用到的比较运算符,每一次比较其实就是一次条件判断,都会相应的得到一个为True或False的值。而逻辑运算符的的操作数就是一个用来做条件判断的表达式或者变量。
>>> a > b and a < b # 如果两个操作数都是True,那么结果为True,否则结果为False。
False
>>> a > b or a < b # 如果有两个操作数至少有一个为True, 那么条件变为True,否则为False。
True
>>> not a > b # 反转操作的状态,操作数为True,则结果为False,反之则为True
False
结果为True的时候,我们一般称 结果为 真, 逻辑运算符会有一个真值表。
5. 成员运算符: not in 、in (判断某个单词里是不是有某个字母)
成员运算符用来判断一个元素是否是另一个元素的成员。 比如说我们可以判断 “hello” 中是否有 “h”, 得到的结果也是True 或者 False。
>>> "h" in "hello" # 这里的意思是 “h” 在“Hello” 中,判断后结果为True
True
>>> "h" not in "hello" # 这里的意思是 “h” 不在“Hello” 中,判断后结果为False
False
6.身份运算符: is、is not(讲数据类型时讲解,一般用来判断变量的数据类型) 用来判断身份。
>>> a = 123456
>>> b = a
>>> b is a #判断 a 和 b 是不是同一个 123456
True
>>> c = 123456
>>> c is a #判断 c 和 a 是不是同一个 123456
False
>>> c is not a #判断 c 和 a 是不是不是同一个 123456
True
这里我们首先将123456赋值给a,后有将a赋值给b, 这样其实是 a和b 的值都是123456, 但是后面c的值也是123456,为什么 第一次a is b 的结果为True ,c和 a 的结果为False 呢?
原因是这样的: 我们知道程序是运行在内存里的,第一次 我们将123456赋值给a的时候,其实是在内存里开辟了一块空间,将123456放在这块空间里,为了找到这里的123456, 会有一个指向这块空间的地址,这个地址叫做内存地址,是123456存储在内存中的地址。a其实指向的就是存储123456的内存空间的地址。执行了b=a,就是让b指向的地址和a一样。之后我们执行了 c = 123456 ,这里就会再开辟一块内存空间,并将指向该空间的内存地址赋值给c ,这样的话 ,a和b 指向的是同一个123456, c 指向的是另外一个123456 。
7. 位运算符:
先了解一个概念:
我们平时用到的数字在计算机中是以二进制表示的, 这个二进制数叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为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
位运算符一般用于二进制操作,一般用于底层,我们很少用,知道就可以了。
优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
运算符那么多,优先级记不住怎么办? 使用小括号。通过使用小括号,我们就可以很方便的进行优先级的区分。
九、输入
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # 将用户输入的内容赋值给 name 变量
4 name = raw_input("请输入用户名:")
5 # 打印输入的内容
6 print name
十、流程控制和缩进
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
# 打印输入的内容
print pwd
需求一、用户登陆验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
需求二、根据用户输入内容输出其权限
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
十一、while循环
1、基本循环
1 2 3 4 5 6 |
|
2、break
break用于退出所有循环
1 2 3 4 |
|
3、continue
continue用于退出当前循环,继续下一次循环
1 2 3 4 |
|
1、使用while循环输入 1 2 3 4 5 6 8 9 10
1 n = 1
2 while n < 11:
3 if n == 7:
4 pass
5 else:
6 print(n)
7 n = n + 1
8 print('End')
2、求1-100的所有数的和
1 n = 1
2 s = 0
3 while n < 101:
4 s = s + n
5 n = n + 1
6 print(s)
3、输出 1-100 内的所有奇数
1 n = 1
2 while n < 101:
3 temp = n % 2
4 if temp == 0:
5 pass
6 else:
7 print(n)
8 n = n + 1
9 print('End')
4、输出 1-100 内的所有偶数
1 n = 1
2 while n < 101:
3 temp = n % 2
4 if temp == 0:
5 print(n)
6 else:
7 pass
8 n = n + 1
9 print('End')
5、求1-2+3-4+5 ... 99的所有数的和
1 n = 1
2 s = 0
3 while n < 100:
4 temp = n % 2
5 if temp == 0:
6 s = s -n
7 else:
8 s = s + n
9 n = n + 1
10 print(s)
6、用户登陆(三次机会重试)
如果用户名或者密码二者其一不正确,则循环重试,循环次数三次
1 #用户登录(三次机会重试)
2 #如果用户名或者密码二者其一不正确,则循环重试,循环次数三次
3 import getpass
4 time = 1
5 while time:
6 name = raw_input("The user name is: ")
7 passwd = getpass.getpass("The password is: ")
8 if name!="bill" or passwd!="123":
9 if time < 3:
10 print("Please try again")
11 time += 1
12 continue
13 else:
14 print("Sorry, time is over!")
15 break
16 else:
17 print("Congraulation to you for log in success")
18 break
1 count = 0
2 while count < 3 :
3 user = input('请输入用户名:')
4 pwd = input('请输入密码:')
5 if user == 'wyf' and pwd == '123':
6 print('欢迎登陆')
7 break
8 else:
9 print('用户名或者密码错误')
10 count = count +1