本篇为python基础部分,包含练习题
基础知识点:
1.python是解释型语言,不需要编译,直接由解释器解释运行。
CPython
当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>
作为提示符,而IPython用In [序号]:
作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
2.python基本数据类型
标准数据类型
Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Sets(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(四个):Number(数字)、String(字符串)、Tuple(元组)、Sets(集合);
可变数据(两个):List(列表)、Dictionary(字典)。
特殊类型:
None Ture False
3.python的流程控制语句:
条件语句:
age = int(input("请输入你家狗狗的年龄: "))
print("")
if age < 0:
print("你是在逗我吧!")
elif age == 1:
print("相当于 14 岁的人。")
elif age == 2:
print("相当于 22 岁的人。")
elif age > 2:
human = 22 + (age -2)*5
print("对应人类年龄: ", human)
else:
...
python中没有switch语句。
while循环:
Python中while语句的一般形式:
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
for循环:
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print("循环数据 " + site)
else:
print("没有循环数据!")
print("完成循环!")
除此之外还有python内置的range函数。
4.字典、列表和元组
这三个是python中最常用到的数据结构,字典和列表也是大部分编程语言中最常用到的数据结构。
字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
也可如此创建字典:
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }
访问字典中的元素:
dict1['abc']
字典的常用api:
列表:
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
常用api:
此外,列表中最强大的还有切片操作。
元组:
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
如下实例:
tup1 = ('Google', 'Runoob', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d"; # 不需要括号也可以
type(tup3)
创建空元组
tup1 = ();
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
tup1 = (50)
type(tup1) # 不加逗号,类型为整型
tup1 = (50,)
type(tup1) # 加上逗号,类型为元组
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
访问元组
元组可以使用下标索引来访问元组中的值,如下实例:
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
练习:
登录程序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by master on 2018/5/15 14:10.
import os
import pickle
class Login(object):
login_success = False
MAX_LOGIN_TIMES = 3
file_path = "locked.list"
user_table = {"a": "1", "b": "2", "c": "3"}
list_locked = {"a": 0, "b": 0, "c": 0}
#写文件
def write_file(self):
with open(self.file_path, "wb") as locked_users:
pickle.dump(self.list_locked, locked_users)
#读文件
def read_file(self):
if os.path.exists(self.file_path):
with open(self.file_path, "rb") as locked_users:
return dict(pickle.load(locked_users))
else:
self.write_file()
#判断用户是否被锁定
def is_locked(self, username):
self.list_locked = self.read_file()
return username in self.list_locked and self.list_locked[username] == self.MAX_LOGIN_TIMES
#登录
def login(self, username, password):
if not username or not password:
print("用户名或密码不能为空!")
return
if username not in self.user_table:
print("用户名或密码错误,请重试!")
return
if self.is_locked(username):
print("当前用户已经被锁定!")
return
try_login_times = self.list_locked[username]
if username in self.user_table and password == self.user_table.get(username):
print("欢迎回来,%s" % username)
try_login_times = 0
self.login_success = True
else:
print("用户名或密码错误,请重试!还有%s次机会" % (self.MAX_LOGIN_TIMES - (try_login_times + 1)))
try_login_times = try_login_times + 1
self.list_locked[username] = try_login_times
self.write_file()
# 程序入口
if __name__ == '__main__':
login = Login()
while not login.login_success:
uname = input("请输入用户名:")
pword = input("请输入密码:")
login.login(uname, pword)