python学习笔记01

2018-05-16  本文已影响23人  单身狗的清香

本篇为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:


image.png

列表:
序列是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:


image.png

此外,列表中最强大的还有切片操作。
元组:
Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

如下实例:

tup1 = ('Google', 'Runoob', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d"; # 不需要括号也可以
type(tup3)

创建空元组

tup1 = ();
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:

tup1 = (50)
type(tup1)     # 不加逗号,类型为整型
<class 'int'>

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)

上一篇下一篇

猜你喜欢

热点阅读