python初级(一)
一,python的简史
1,python的发展
• 1989年,Guido(龟叔)python。
• 1990年, 发布python的第一个版本;
• 2001年发布python2.0版本;
• 2010年获年度Tiobe编程语言大奖
• 2013年发布python3.x版本;
2,python优点缺点
•简单、优雅、明确
•有强大的第三方库模块
•可跨平台移植
•一种面向对象的语言
•代码执行速度慢,相比C语言,不过现在python的异步并发框架导致执行速度慢;
•python是开源的编程语言,代码不能加密;
3,python脚本
•#!/usr/bin/python 这种写法表示直接引用系统的默认的Python 版本;
•#!/usr/bin/env python 这种写法表示,引用环境变量里面
自定义的 Python 版本, 具有较强的可移植性;
指定编码格式的方法
• #coding:utf-8
• #coding=utf-8
• #encoding:utf-8
• #encoding=utf-8
4,Pycharm
• 访问pycharm官网:http://www.jetbrains.com/pycharm/
•下载pychrm社区版本,安装使用,后面我们专门写一个章节,来描述pycharm常用的操作、设置以及快捷键。Pycharm
• 访问pycharm官网:http://www.jetbrains.com/pycharm/
•下载pychrm社区版本,安装使用,后面我们专门写一个章节,来描述pycharm常用的操作、设置以及快捷键。
二,python的数值类型
1,输入与输出
要求:输入某学生的三门课程成绩,计算出该学
生的平均成绩。
提示:(course1+course2+course3)/3
• print + 字符串...
• raw_input输入的内容为字符类型;
• input输入的内容为数值类型
2,变量
- 变量是内存中的一块区域。
- 变量的命名: 变量名由字母,数字,下划线组成。
面试题:简要描述Python的垃圾回收机制;
python中地址变量与c语言刚好相反,一条数据包含包含多个标签;
*变量名合法规则:
1. 变量名由字母, 数字或者下划线组成;
2. 变量名只能以字母或者下划线开头;
while True:
s = raw_input("变量名:")
if s[0].isalpha() or s[0] == "_":
for i in s[1:]:
if i.isalnum() or i == "_":
continue
else:
print "%s 变量名不合法!Error: 变量名后面的字符" % (s)
break
else:
print "%s变量名合法" % (s)
else:
print "%s 变量名不合法! Error: 变量名第一个字符" % (s)
3,运算符和表达式
算术运算符:+,-,*,**, /, %, //
赋值运算符:=, +=, -=, /=, *=, %=
关系运算符: >, >=, <, <=, !=, ==
逻辑运算符:逻辑与and, 逻辑或or, 逻辑非not
4,整型
长整形
• 强制定义为长整型: num3 = 999L
5,浮点型
• 1.2e10代表的数值为1.2的10次方;
• 12e9代表的数值为12的9次方;
6,复数类型
• python对复数提供内嵌支持,eg: 3.14j, 8.32e-36j
三,字符串类型
1,字符串的定义:
•第一种方式:
str1 = 'our company is westos'
•第二种方式:
str2 = "our company is westos"
•第三种方式:
str3 = """our company is westos"""
2,转义符号
一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符
\n: 代表换行符 \": 代表双引号本身
\t: 代表tab符 \': 代表单引号本身
3,三重引号
• 块注释:多行代码注释
• 函数的doc文档:讲函数时会说到
• 字符串格式化
4,字符串操作预览
字符串属于序列,序列支持的操作如下:
• 索引 切片
• 判断子串 重复
• 连接
计算长度
1)索引
• 索引(s[i] ):获取特定偏移的元素
• 给出一个字符串,可输出任意一个字符,如果索引为负数,就是相当于从后向前数。
字符串 | h | e | l | l | o | \n |
---|---|---|---|---|---|---|
索引 | 0 | 1 | 2 | 3 | 4 | 5 |
索引 | -6 | -5 | -4 | -3 | -2 | -1 |
2)切片
切片S[i:j]提取对应的部分作为一个序列:
•上边界并不包含在内;
•如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串的长度;
•扩展的切片S[i:j:k],其中i,j含义同上,k为递增步长;
s[:]获取从偏移量为0到末尾之间的元素,是实现有效拷贝的一种方法
3)判断子串
判断一个sub字符串是不是属于s字符串:
•sub in s
•sub not in s
4)重复、连接及计算长度
5)字符串的类型转换
str(obj) 将其他类型内容转换为字符串
int(obj) 将字符串转换为为整数
float(obj) 将字符串转换为浮点型
long(obj) 将字符串转换为长整型
6)字符串常用操作:
str.capitalize() -将字符串首字母大写,并返回新的首字母大写后的字符串;
str.center(width[,fillchar]) -返回一个长为width的新字符串,在新字符串中原字符居中,
其他部分用fillchar指定的符号填充,未指定时通过空格填充。
str.count(sub[, start[, end]]) -> int -返回sub在str中出现的次数,如果start与end指定,则
返回指定范围内的sub出现次数。
str.endswith(suffix[, start[, end]]) - 判断字符串是否以suffix结束,如果start和end指定,
则返回str中指定范围内str子串是否以suffix结尾,如果是,返回True;否则返回False
str.startswith(prefix[, start[, end]])
str.find(sub[,start[,end]]) - 判断sub是否在str中,存在返回索引值,不存在返回-1.
str.index(sub[,start[,end]]) - 与find方法函数功能相同,如果sub不存在时抛出ValueErro
异常;
str.isalnum() //判断是否都是字母或数字
str.isalpha() //判断是否都是字母
str.isdigit() //判断是否都是数字
str.islower() //判断是否都是小写
str.isspace() //判断是否都是英文空格
str.istitle() //判断是不是都是标题(有大小写)
str.isupper() //判断是不是都为大写字母字符串常用操作:
str.join(seq) - 以str作为分隔符,将序列seq中的所有元素合并为一个新的字符串。
str.replace(old,new[,count]) - 将str中的old字符串替换为new字符串,并将替换后的新字
符串返回,如果count指定,则只替换前count个
str.split([sep[,maxsplit]]) - 以sep字符串作为分割符对str进行切割,默认为空格; -
maxsplit代表切割的此处字符串常用操作:
str.strip([chars]) - 返回一字符串,将str中首尾包含指定的chars字符
删除的字符串,未指定时,删除首尾的空格。
四,列表list
1)列表的定义
• 定义一个空列表
list = []
• 定义一个包含元素的列表,元素可以是任意类型,包括数值类型,列表,字符串等均可。
list = ["fentiao", 4, 'gender']
list1 = ['fentiao',(4,'male')]
2)列表的索引
•下标是从0开始计算,比如list[0]读取的是列表的第1个元素;
•list[-1]读取的是列表的倒数第1个元素;
array = [1, 2, 3, 4, 5, 6, 7]
li = [1, 1.0, 1L, "hello", 1 + 3j]
3)列表的切片
• 0代表从哪个索引开始切片;
• 3代表切片到哪个位置,并且不包含第三个索引;
• 2代表切片的步长;
>>> list1
['fentiao', 5, 'male']
>>> list1[0:3:2]
['fentiao', 'male']
4)列表的添加
• 列表可通过append方法添加元素;
• 在指定位置添加元素使用inert方法;
L.insert(index, object)
5)列表的修改
• 修改列表的元素:直接重新赋值;
6)列表的查看
• 查看某个列表元素的下表用index方法;
• 查看某个列表元素出现的次数用count方法;
列表的删除
• list.remove(list[])
• del(list[])
7)
allow_ip = ['172.25.254.91', '172.25.254.2', '172.25.254.14', '172.25.254.32']
# 增
# # append追加元素到列表的最后;
# allow_ip.append('172.25.254.6')
# print allow_ip
#
#
# # insert将元素添加到指定索引的前面;
# allow_ip.insert(1,'172.25.254.34')
# print allow_ip
#
# # extend是追加多个元素到列表中;
# allow1_ip = ['172.25.254.56', '172.25.254.66']
# allow_ip.extend(allow1_ip)
# print allow_ip
# 改
# # 给列表的指定索引重新赋值;
# allow_ip[0] = '172.25.254.11'
# print allow_ip
# 查
# # 显示指定元素出现的次数;
# print allow_ip.count('172.25.254.1')
#
# # 显示指定元素的索引值;如果出现多个,显示小的那个索引;如果元素不存在,报错,ValueError;
# print allow_ip.index('172.25.254.1')
# 删
# pop是删除指定索引的值;如果列表为空或者索引不在范围内,则报错; 如果不指定索引值,默认删除最后一个元素;
# allow_ip.pop()
# 删除列表中最先出现的值,不存在,则报错;
# allow_ip.remove('172.25.254.1')
# print allow_ip
# 反转列表
# allow_ip.reverse()
# 列表排序
allow_ip.sort()
print allow_ip
五,if条件判断
C语言的if语句:
if (表达式){
}
Python的if语句:注意缩进
if 表达式:
if-suite
if 表达式:
if-suite
else:
else-suite
1)year = input('Year:')
# =是赋值, ==判断是否相等; PEP8
bool_res = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
if bool_res:
# pass是占位关键字
# pass
print "%s 是闰年" %(year)
else:
print "%s 不是闰年" %(year)
2)用户登陆系统Version1:
1). 已知用户名和密码;
2). 判断用户名和密码是否正确;
如果正确, 输出用户登陆成功;
如果不正确, 输出登陆失败;
"""
import getpass
user = "root"
passwd = "redhat"
username = raw_input("用户名:")
password = getpass.getpass("密码:")
if username == user and password == passwd:
print "%s用户登陆成功!" % (username)
print """
ATM管理系统
1. 取款
2. 存款
3. 查询余额
4. 退出
"""
choice = input("请输入你的选择:")
if choice == 1:
pass
elif choice == 2:
pass
elif choice == 3:
pass
elif choice == 4:
exit(0)
else:
print "请输入正确的选择!"
else:
print "%s 用户登陆失败!" % (username)
3)# if, if...else, if ... elif...else....
a = 1
b = 2
# 三目运算符: a>b?a:b <注意: python中不支持>
print a if a > b else b
# if a>b:
# print a
# else:
# print b
六,循环语句
1)while 表达式:
循环执行的语句
while 表达式:
循环执行的语句
else:
不符合循环条件执行的语句
# 死循环
while True:
死循环的语句
while 1:
死循环的语句
"""
import getpass
# 数据库中存储的用户名和密码;
user = "root"
passwd = "redhat"
# 已登陆的次数;
trycount = 0
# 登陆次数小于3,允许再次登陆;
while trycount < 3:
print "%s次登陆........" %(trycount+1)
username = raw_input("用户名:")
password = getpass.getpass("密码:")
if username == user and password == passwd:
print "%s用户登陆成功!" % (username)
print """
ATM管理系统
1. 取款
2. 存款
3. 查询余额
4. 退出
"""
while 1:
choice = input("请输入你的选择:")
if choice == 1:
print "取款"
elif choice == 2:
print "存款"
elif choice == 3:
print "查询余额"
elif choice == 4:
exit(0)
else:
print "请输入正确的选择!"
else:
print "%s 用户登陆失败!" % (username)
trycount += 1
# 登陆次数超过三次,报错;
else:
print "登陆次数超过3次, waiting......
2)# print range(1,11) # [1,11)
import time
start_time = time.time()
sum = 0
for i in range(2,1000001,2):
sum += i
print sum
# print sum(range(2,1000001,2))
end_time = time.time()
print "run %s" % (end_time - start_time)
3)# break: 遇到这个关键字跳出当前循环;不再继续执行循环;
# continue:遇到这个关键字跳出本次循环;
while True:
cmd = raw_input(">>>")
if cmd == "":
continue
# print "cmd"
elif cmd == "q":
break
else:
print cmd
4)求偶数和
import time
start_time = time.time()
num = 2
sort = 0
while num <= 10000:
sort += num
num += 2
print sort
end_time = time.time()
print "run %s" % (end_time - start_time)
基础巩固
1,E
2,E
3,E
4,4
5,D
6,CD
7,删除两边空格 向左对齐 分割字符串
8,元素追加至列表的末尾 在3 位置添加'a' 添加列表
9,urls= ['http://www.baidu.com', 'https://www.westos.org', 'file:///hello.txt',
'https://www.westos.com']
for i in urls:
if i.startswith('https') and i.endswith('.com'):
print i
10,True False
11,CPython IPython PyPy
12,
编码 | 大小 | 支持语言 |
ASCII | 1个字节 | 英文 |
Unicode | 2个字节(生僻字4个) | 所有语言 |
UTF-8 | 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 | 所有语言 |
13,必须是文件的第一行 必须以#!开头 例如:#!/usr/bin/env python
14,0
15,python2有input和raw_input两种,input可以输入整形的数据,python3中input都为str
16,type a b = str(a)
17,B
18, 10 内存地址
19,list list
20, [True,5]