Author:@南非波波
作者注:
python学习旅程正式开启,这一天将是一个新的开始。希望我们在python开发的道路上多多积累、多分享!
一、python简介
python应用
Disgus Voitze Yelip Mozilla Quora Redit
豆瓣、知乎、sohu、腾讯、网易、金山、雅虎、Facebook、 Instagram(图片分享)
python2与python3比较
经过多年的发展,python3已经得到更多的第三方优秀函数库兼容,对比python2来说,python3表现出来的精简高效特性让开发者们跃跃欲试。
另外,python2.7.11作为python2版本的最后一个版本,不再有新版本推出,这样官方更多的引导开发者快速的向python3版本上进行转移。
在本次学习的过程中,我们会穿插在python2和python3两个版本之间进行学习,后续的测试代码在开头会明确标记python的使用版本。相关注释都会对python2和python3的差异进行描述。
二、python安装
1.windows端安装
安装包下载地址:
python2.7版本:
https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi
python3.5版本:
https://www.python.org/ftp/python/3.5.1/python-3.5.1-amd64.exe #安装版
https://www.python.org/ftp/python/3.5.1/python-3.5.1-embed-win32.zip #免安装版
安装步骤:
使用可执行程序进行安装,按照流程进行安装即可,注意在安装的时候选择“安装路径”和一些必要的插件,比如pip、easy_install等
使用免安装的文件(可嵌入的)进行环境配置:
![](http://i.imgur.com/U827QAb.jpg)
2.linux端安装
centos6等常用系统自带的python版本为2.6,有特殊需求的朋友可能需要升级到python2.7或者python3版本。下面链接以python2.7.8为例进行编译安装。
http://swht1278.blog.51cto.com/7138082/1728427
提供一下python版本的下载地址:
python2.7.11版本:
https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
python3.5版本:
https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
3.Ubuntu端安装
最新版本的Ubuntu系统(15.04等)已经自带了python2.7.9和python3.4.5两个版本的python环境,我们只需要在shell终端输入python2或python3进行调用即可。老版本的系统升级python环境需要以下操作:
# 增加python源
sudo add-apt-repository ppa:fkrull/deadsnakes
# update 软件列表
sudo apt-get update
# 安装python3
sudo apt-get install python3.5
三、基础概念
变量:Python 是动态类型语言, 也就是说不需要预先声明变量的类型。变量是对象的引用,变量只是将指针指向了对象所在的内存地址。变量的类型和值在赋值那一刻被初始化。
变量起名:
1.显式-->通俗易懂
2.nums_of_alex_gf = 19
3.NumsOfAlexGf = 20 驼峰写法
4.中横线不能作为变量的命名字符
5.数字不能作为开头,但可以在中间或者结尾
6.特殊字符不能作为变量名的组成部分
7.不能使用空格
8.关键字不能声明为变量
四、运算符
算术运算符
+ - * / // % **
/:传统除法,将执行地板除法,
//:浮点除法,即去尾法除法,保留位数与除数和被除数的小数位数有关 (取整除,返回商的部分)
**:平方运算
比较运算符
< <= > >= == != <>
不等于:!= <>
返回值是:True 和 False
赋值运算符
>>> counter = 0
>>> miles = 1000.0
>>> name = 'Bob'
>>> counter = counter + 1
>>> kilometers = 1.609 * miles
>>> print '%f miles is the same as %f km' % (miles, kilometers)
1000.000000 miles is the same as 1609.000000 km
支持简写:n=n*3 -> n*=3 但不支持自增自减,因为“-” 和”+”是单目字符,--n -> -(-n)n
位运算符
& 按位与 (a&b)
| 按位或 (a|b)
^ 按位异或 (a^b)
~ 按位取反 (~a)
<< 左移动 a<<1 整体向左移动,结果是原来数值的2倍
>> 右移动 a>>1 整体向右移动,结果是原来数值的1/2
逻辑运算符
and 布尔“与” 同真为True
or 布尔“或” 同假为False
not 布尔“非” 非True即False
成员运算符
in 如果在指定序列中找到指定的值,返回True
not in 如果在指定序列中没找到指定的值,返回False
身份运算符
is 判断两个标识符是不是引用自同一个对象
type(names) is list 判断某个变量值的类型(list、int、dic)
is not 判断两个标识符是不是引用自不同对象
五、字符编码
python2 中在输入中文字符的时候会报字符编码的错误,在python3中已经引入了Unicode(万国码、统一码、),它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由16位二进制来表示(2个字节),即2 ** 16 = 65536
UTF-8,是对Unicode编码的压缩和优化,它不再使用最少2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存,欧洲的字符用2个字节保存,东亚的字符用3个字节保存
示例
python2
#!/usr/local/env python2
# -*- coding: utf-8 -*- # 声明使用的字符类型,否则会报错
'''
@swht
'''
print "你好!"
python3
#!/usr/local/env python3
'''
@swht
'''
print ("你好!")
总结:在python3中完全不用考虑字符编码的问题,python解释器会自行处理字符类型的问题
六、python流程控制
流程控制分为两大类:条件判断和循环
其中循环又分为两类:for循环和while循环
条件判断和循环可以单独存在,也可以嵌套使用,以处理更为复杂的逻辑问题。
下面会从if条件判断、for循环和while循环进行代码示例:
if_ex.py
#!/usr/bin/env python3
'''
@swht
'''
LuckyNum = 9
# 让用户输入一个数值与指定的值进行比较,当然这里没有处理用户输入为空的情况
# strip() 可以截取用户输入字符串首尾的空格
UserInputNum = int(input("请从1-100之间选择一个数字输入:").strip())
if UserInputNum > LuckyNum:
print("你输入的数字比我的LuckNum要大哦!")
elif UserInputNum < LuckyNum:
print("你输入的数字比我的LuckNum要小哦!")
else:
print("恭喜你猜中了我的LuckNum,原来你就是我的幸运天使!")
while_ex.py
#!/usr/bin/env python3
'''
@swht
'''
LuckyNum = 9
# 设置一个标志位,用于程序判断退出循环,
flag = True
while flage:
UserInputNum = int(input("请从1-100之间选择一个数字输入:").strip())
if UserInputNum > LuckyNum:
print("你输入的数字比我的LuckyNum要大哦!")
elif UserInputNum < LuckyNum:
print("你输入的数字比我的LuckyNum要小哦!")
else:
print("恭喜你猜中了我的LuckyNum,原来你就是我的幸运天使!")
flag = False
for_ex.py
#!/usr/bin/env python3
'''
@swht
'''
LuckyNum = 9
for count in range(3):
UserInputNum = int(input("请从1-100之间选择一个数字输入:").strip())
if UserInputNum > LuckyNum:
print("你输入的数字比我的LuckyNum要大哦!")
elif UserInputNum < LuckyNum:
print("你输入的数字比我的LuckyNum要小哦!")
else:
print("恭喜你猜中了我的LuckyNum,原来你就是我的幸运天使!")
break
else:
print("你输入的次数已达到3次,程序即将退出!")
对比break和countnue
break是结束整个循环体,continue是结束单次循环
示例
#!/usr/local/env python3
'''
@swht
'''
x = 0
while x < 10:
if x ==3:
break
x += 1
print("x=%s" % x)
输出结果: x=1
x=2
x=3
直接退出了整个while循环
七、格式化输出
使用'''string'''可以很方便的将多行内容进行注释,另外这个符号还有一个功能,那就是文档描述的功能。一般而言,在程序的前面后有一个文档说明,包括作者信息,版本信息,功能等
#!/usr/bin/env python
'''
@swht
'''
name = input("name:")
age = input("age:")
job = input("job:")
print("Information of:" + name + "\nname:" + name + "\nage:" + age + "\njob:" + job)
print("Information of %s\nname:%s\nage:%s\njob:%s" %(name,name,age,job))
print('''
Infomation of %s
name:%s
age:%s
job:%s
''' % (name,name,age,job))
八、数据类型:
列表转换成元组:tuple(name_list)
元组转换成列表:list(元组_name)
1.数字
int 整型
long 长整型
float 浮点型
2.布尔
1 真
0 假
3.字符串
stinglist = “Hello World”
字符串操作:
(参考:http://www.cnblogs.com/zhxiang/p/3385242.html
http://www.jb51.net/article/47956.htm)
移除空白:stinglist.strip()
移除特殊字符:stinglist.lstrip().rstrip(',')
分割:>>> stringlist[2]
'l'
长度:>>> len(stringlist)
11
索引:>>> stringlist.index('W') #字母‘W’所在的索引值
6
切片:>>> stringlist[0:3] #顾前不顾尾
'Hel'
字符串在输出时的对齐:
>>> stringlist[0:3]
'Hel'
>>> stringlist[0:3].ljust(5) #ljust(width,[fillchar]) fillchar为填充字符,默认为空格
'Hel '
字符串拼接:
>>> stringlist += s
>>> stringlist
'Hello Worldab,cde,fgh,ijk'
大小写转换:
>>>stringlist.lower() #小写
'hello world'
>>> stringlist.upper() #大写
'HELLO WORLD'
>>> stringlist.swapcase() #大小写互换
'hELLO wORLD'
>>> stringlist.capitalize() #首字母大写
'Hello world'
>>> string.capwords(stringlist) #以空格分割,每个单词首字母大写
'Hello World'
字符串翻转:
>>> s
'sdsds sdsdsff'
>>> s = s[::-1]
>>> s
'ffsdsds sdsds'
字符串查找:
>>> stringlist.find('World')
6
判断是否为整型:
>>> stringlist.isdigit()
False
判断字符串是否为空格:
>>> stringlist.isspace()
False
转换成列表:
>>> stringlist.split() #默认以空格为分割
['Hello', 'World']
4.列表(dir(name_list)获取列表操作帮助)
参考:http://www.jb51.net/article/46768.htm
name_list = ['alex', 'sddkd', 'shdjsjd', 'shen', 'swht', 'test']
移除空白:name_list.strip()
获取元素:name_list[index_num]
索引:name_list.index("swht") 获取指定元素的索引值
追加:name_list.append("test") 在列表后面追加一个元素
插入:name_list.insert(3,"ssdd") 在索引值3后面插入新的元素
删除:name_list.pop() 删除最后一个元素
name_list.remove("test") 删除指定的元素
排序:name_list.sort() 对元素按照ASCII码进行排序
python3 里面不能同时sort int 和 str类型
反转顺序:name_list.reverse() 对列表中的元素进行反转操作
切片:name_list[0:3] 切取索引值从0-2的值(切片顾头不顾尾)
扩展:name_list.extend(name_list2) 在一个列表后面追加另一个列表的元素,或者追加一个变量中的单个字符
5.元组
>>> namelist = ("swht","test")
>>> type(namelist)
<class 'tuple'>
索引:>>> namelist.index('swht') #查找某个字符串的索引值
0
统计:>>> namelist.count('swht') #统计某个字符串出现的次数
1
6.字典(无序)
参考:http://www.jb51.net/article/47990.htm
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行
dict = {"swht":"test123","shen":"test124","test":"test125"}
访问字典里的值:
>>> dict["swht"]
'test123'
增加字典里的值:
>>> dict["alex"] = "test126"
>>> dict
{'test': 'test125', 'shen': 'test124', 'swht': 'test123', 'alex': 'test126'}
删除字典当中的元素:
>>> del dict["test"]
>>> dict
{'shen': 'test124', 'swht': 'test123', 'alex': 'test126'}
>>>
清空字典里的所有条目:
>>> dict.clear()
>>> dict
{}
删除字典:del dict
九、文件操作
简单操作:
filename = open("文件路径","模式") #打开文件
filename.write('内容') #往文件中写入内容
filename.read() #一次性加载文件中的内容到内存
filename.readlines() #一次性加载所有的内容到内存,并根据行分割成字符串
filename.close() #关闭文件句柄
十、作业
作业一:编写登录接口
,
作业二:多级菜单