第一个程序
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 print("Hello World!")
在linux上需要用#!/usr/bin/env python告诉系统用什么解释器来执行此段代码
# -*- coding: utf-8 -*-则是指示此段代码的编码格式,一般作为固定格式
变量
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 name = "Xll" 5 name1 = name 6 print("My name is ",name,name1)
7
8 name = "WangPin" 9 10 print("My name is ",name,name1)
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
- ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
PS:变量是用来存东西的;变量名要有含义;变量名大写代表常量,不应该去修改它
编码
- ASCII 一个字符占一个字节,即8位
- UNICODE 一个字符占两个字节,即16位
- UTF-8 存英文字符占一个字节,存中文占三个字节
注释
# 注释单行,PS:pycharm中可以用ctrl+/进行批量注释,或者批量反注释
''' '''或者""" """ 多行注释,前面加变量可以进行多行输入输出
用户输入
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 5 name = input("Please input your name:") 6 print(name)
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法, 如下:
1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 import getpass 5 6 username = input("Username:") 7 passwd = getpass.getpass("Passwd:") 8 9 print(username,passwd)
PS:getpass在pycharm中不好使,试着在命令行窗口运行。
循环
while循环
1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 5 age_of_breakering = 25 6 7 count = 0 8 9 while count < 3: 10 guessage = int(input("Guessage:")) 11 if age_of_breakering == guessage: 12 print("Yeah you got it !") 13 break 14 elif age_of_breakering > guessage: 15 print("Think bigger!") 16 else: 17 print("Think smaller!") 18 count += 1 19 else: 20 print("You have tried too much times!")
for循环
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 age = 25 5 6 for i in range(3): 7 guessage = int(input("Guessage:")) 8 if age == guessage: 9 print("Yeah you got it !") 10 break 11 elif age > guessage: 12 print("Think bigger!") 13 else: 14 print("Think smaller!") 15 else: 16 print("You have tried too much times!")
模块
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。
sys
1 import sys 2 print(sys.path) #打印环境变量 3 print(sys.argv) 4 print(sys.argv[2]) #接受执行脚本时输入的第二个参数
os
1 import os 2 cmd_res = os.system("dir") #执行命令,不保存结果 3 cmd_res = os.popen("dir").read() 4 print("---->",cmd_res) 5 os.mkdir("new_dir") #在当前路径下创建一个新的目录
完全结合一下
1 import os,sys 2 3 os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
pyc是个什么鬼?
参考大王博客:http://www.cnblogs.com/alex3714/articles/5465198.html
PS:pyc 是预编译的字节码
数据类型
2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。
int(整型) PS:python3没有长整型
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
1 name = 'Xll'
1 l = ["Xll","WangHua"]
1 t = ("Xll","WangHua")
1 person_dict = { 2 "Xll":26, 3 "WangHua":27 4 }
数据运算
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 a = 80 #80 = 0101 0000 5 b = 60 #60 = 0011 1100 6 7 c = a & b #16 = 0001 0000 8 9 d = a | b #124 = 0111 1100 10 11 e = a ^ b #108 = 0110 1100 #相同为0,不同为1 12 13 f = ~a #-81 = 1010 1111 175-256=-81 14 15 g = a << 2 #320 = 1 0100 0000 16 17 h = a >> 2 #20 = 0001 0100
*按位取反运算规则(按位取反再加1) 详解http://blog.csdn.net/wenxinwukui234/article/details/42119265
运算符优先级:
更多内容:http://www.runoob.com/python/python-operators.html
判断if....else
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 age_of_oldboy = 56 5 6 count = 0 7 8 while count < 3: 9 guessage = int(input("Guessage:")) 10 if age_of_oldboy == guessage: 11 print("Yeah you got it !") 12 break 13 elif age_of_oldboy > guessage: 14 print("Think bigger!") 15 else: 16 print("Think smaller!") 17 count += 1 18 if count == 3: 19 continue_confirm = input("Do you want to continue:[Y/N]") 20 if continue_confirm != "N": 21 count = 0
bytes类型
python3的bytes&str之别
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 5 info = "我是最棒的" 6 7 print(info) 8 #我是最棒的 9 print(info.encode(encoding="utf-8")) 10 #b'xe6x88x91xe6x98xafxe6x9cx80xe6xa3x92xe7x9ax84' 11 print(info.encode(encoding="utf-8").decode(encoding="utf-8")) 12 #我是最棒的
三元运算
1 result = 值1 if 条件 else 值2
如果条件为真:result = 值1
如果条件为假:result = 值2
进制
- 二进制,01
- 八进制,01234567
- 十进制,0123456789
- 十六进制,0123456789ABCDEF 二进制到16进制转换http://jingyan.baidu.com/album/47a29f24292608c0142399cb.html?picindex=1
计算机内存地址和为什么用16进制?
为什么用16进制1、计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)2、最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
3、计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
4、为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算
16进制用在哪里
1、网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。
2、数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式3、一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。
列表
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
1 names=['ZhangSan','LiSi','WangWu','MaZi','ZhaoYun','QiSan'] 2 names.append('LeiHaidong') 3 names.insert(2,'WangErxiao') 4 names[2]='XieDi' 5 print(names) 6 #names.remove('LiSi') #删除 7 #del names[2] #删除 8 #names.pop(2) #删除 9 #print(names[names.index("QiSan")]) #index("值")找到位置 10 print(names.count('QiSan')) #查找某个值的个数 11 #names.clear() #清空 12 #names.reverse() #反转 13 #names.sort() 排序 14 names2=[1,2,3,45,6,7,78,89,0] 15 names.extend(names2) 16 del names2 17 print(names) 18 #print(names[0],names[2]) 19 #print(names[-3:]) 20 #print(names[:2])
字典
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:xll 4 name_dict = { 5 "Xll":29, 6 "WangHua":24, 7 "ZhangXiao":25, 8 "YinZhiqia":26 9 }
字典的特性:
- dict是无序的 PS:dict无序是因为dict没有下标
- key必须是唯一的,so 天生去重
1 #循环字典 2 #方法1 3 for key in name_dict: 4 print(key,name_dict[key]) 5 6 #方法2 7 for k,v in name_dict.items(): #会先把dict转成list,数据量大时莫用 8 print(k,v)
文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Auther:Xll 4 5 f1 = open("aaaa1",'w',encoding="utf-8") #文件句柄 6 #data = f1.readline() 7 f1.write(" I love BeiJing TianAnmen! ") 8 f1.write("The Sun rise on TianAnmen !") 9 f1.write(" hello " 10 ''' low loop 11 for index,line in enumerate(f1.readlines()): 12 if index == 9: 13 print("-------end--------") 14 break 15 print(line.strip()) 16 17 ###high big 迭代器 18 count=0 19 for line in f1: 20 if count == 9: 21 print("This is the ten line----") 22 break 23 print(line.strip()) 24 count += 1 25 print(f1.tell()) 26 print(f1.readline()) 27 print(f1.tell()) 28 f1.seek(100) 29 print(f1.tell()) 30 print(f1.readline()) 31 print(f1.encoding) 32 ''' 33 print(f1.flush()) #刷新缓存中的写入内容到文件中 34 #print(dir(f1.buffer) ) 35 36 f1.close() 37 #for i in data: 38 #print(data)
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Auther:Xll 4 import sys,time 5 ''' 6 for i in range(10): 7 sys.stdout.write("#") 8 sys.stdout.flush() 9 time.sleep(0.2) 10 ''' 11 #f = open("aaaa",'r+',encoding="utf-8")#读写模式,3.0只支持追加邪 12 #f = open("aaaa",'w+',encoding="utf-8")~~一般没用 13 #f = open("aaaa",'wb') #网络传输,视频格式、二进制文件 使用 14 #f.write("hello binary ".encode()) 15 #print(f.readline()) 16 #print(f.readline()) 17 #print(f.readline()) 18 #print(f.tell()) 19 #print(f.read()) 20 f = open("1a",'r',encoding="utf-8") 21 f1 = open("2a",'w',encoding="utf-8") 22 for line in f: 23 if '肆意的快乐' in line: 24 line = line.replace("肆意的快乐","肆意的快乐等我来享受") 25 f1.write(line) 26 27 f.close() 28 f1.close()
函数是什么?
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 保持一致性
- 代码可扩展
函数的参数:
- 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
- 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
函数的简单用法:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Auther:Xll
'''
形式参数
关键字参数
位置参数
关键字参数必须在形式参数之前。
默认参数
#不定参数函数
def conn(x,y=18,*args):
print(x)
print(y)
print(args)
conn("alex",22,1,2,3,4,55,6,7,8,8,9,00,0)
# **kwargs 把N个关键字参数,转换成字典的形式
def test2(**kwargs):
print(kwargs)
test2(name='alex',age=24,sex="F",work="teacher")
#函数中变量的作用域,仅能在函数内作用
def change_name(name):
print("before change",name)
name = "alex"
print("after change" ,name)
name='Alex'
change_name(name)
print(name)
'''
#函数的递归调用
def calc(x):
print(x)
if int(x/2)>0:
return calc(int(x/2))
print("--->",x)
calc(100)