零基础学Python

Pycharm快捷键
Ctrl + Alt + L 格式化代码
Ctrl + / 注释

1. Python语言的特点

课程介绍

激励
image.png

Python优点


2. Python的发展历史与版本

Python的历史

Python的版本选择

学习Python编程的利器


3. Python的安装

Pychram创建项目


4. Python程序的书写规则

# 这是我的第一个Python程序

import time  # 我导入了一个时间模块

print(time.time())  # 在屏幕上打印出从1970年1月1日0:00到现在经过了多少秒

if 10 - 9 > 0:
    # 这行需要缩进,缩进用4个空格
    print('10大于9')

5. 基础数据类型

基本数据类型

type可用来panduan判断类型

数据类型转换操作


6. 变量的定义和常用操作

案例

变量

# 网络带宽计算

# print(100/8)

bandwidth = 100
radio = 8
print(bandwidth / radio)

变量命名
summary


7. 序列的概念

案例

序列

解决问题的思路

  • 编程中遇到的问题
  • 这个问题在现实中我们如何去解决
  • 编写相应的代码和进行测试
# 记录生肖,根据年份来判断生肖

chinese_zodiac = '鼠牛虎兔龙蛇马羊猴鸡狗猪'

print(chinese_zodiac[0:4])

# 支持负号的访问
print(chinese_zodiac[-1])

# 列表和元组也可以用这种方式

8.字符串的定义和使用

# 记录生肖,根据年份来判断生肖

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# print(chinese_zodiac[0:4])

# 支持负号的访问
# print(chinese_zodiac[-1])

# 列表和元组也可以用这种方式

# 基于年份判断生肖
year = 2018
print(year % 12)
print(chinese_zodiac[year % 12])

9.字符串的常用操作

常用操作

# 记录生肖,根据年份来判断生肖

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# print(chinese_zodiac[0:4])

# 支持负号的访问
# print(chinese_zodiac[-1])

# 列表和元组也可以用这种方式

# 基于年份判断生肖
year = 2018
print(year % 12)
print(chinese_zodiac[year % 12])

# 成员在字符串中
print('狗' in chinese_zodiac)
print('狗' not in chinese_zodiac)

结果

# 记录生肖,根据年份来判断生肖

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# print(chinese_zodiac[0:4])

# 支持负号的访问
# print(chinese_zodiac[-1])

# 列表和元组也可以用这种方式

# 基于年份判断生肖
year = 2018
print(year % 12)
print(chinese_zodiac[year % 12])

# 成员在字符串中
print('狗' in chinese_zodiac)
print('狗' not in chinese_zodiac)

print(chinese_zodiac + chinese_zodiac)
print(chinese_zodiac + 'abcd')
print(chinese_zodiac*3)

结果


10.元组的定义和常用操作

不可变更的数据

元组中两个数据的比较
测试

filter用法

# 小写的u表示unicode编码
zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
               u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
# 月份和日期同时进行存储
zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23),
               (10, 23), (11, 23), (12, 23))

(month, day) = (2, 15)
zodiac_day = filter(lambda x: x <= (month, day), zodiac_days)
# print(zodiac_day)
zodac_len = len(list(zodiac_day))%12
print(zodiac_name[zodac_len])

结果


11.列表的定义和常用操作

# 可以增加和删除元素
a_list = ['abc', 'xyz']
# 增加元素append()
a_list.append('X')
print(a_list)
# 移除元素
a_list.remove('xyz')
print(a_list)

结果
总结


12.条件语句

条件语句

x = 'abcd'
if x == 'abc':
    print('x的值和abc的值相等')
else:
    print('x和abc不相等')

结果

# 记录生肖,根据年份来判断生肖

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# 基于年份判断生肖
year = int(input('请用户输入出生年份:'))

if (chinese_zodiac[year % 12]) == '狗':
    print('狗年的运势为。。。')

image.png

image.png


  1. for循环
    循环语句
# 记录生肖,根据年份来判断生肖

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# 基于年份判断生肖
# year = int(input('请用户输入出生年份:'))

# if (chinese_zodiac[year % 12]) == '狗':
#     print('狗年的运势为。。。')

# 遍历字符串
for cz in chinese_zodiac:
    print(cz)

for i in range(13):
    print(i, end=' ')
print()

for i in range(1, 13):
    print(i)

for year in range(2000, 2019):
    print('%s年的生肖是%s' % (year, chinese_zodiac[year%12]))

image.png

image.png

用for循环遍历python中的一个序列


14.while循环

num = 5
while True:
    print('a')
    num = num + 1
    if num > 10:
        break

break

import time

num = 5
while True:
    num = num + 1

    if num == 10:
        continue

    print(num)
    time.sleep(1)

continue


15.for循环语句中的if嵌套

# 小写的u表示unicode编码
zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
               u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
# 月份和日期同时进行存储
zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23),
               (10, 23), (11, 23), (12, 23))

# 用户输入月份和日期
int_month = int(input("请输入月份:"))
int_day = int(input('请输入日期:'))

for zd_num in range(len(zodiac_days)):  # 取出0-11的数值,遍历元组
    if zodiac_days[zd_num] >= (int_month, int_day):
        print(zodiac_name[zd_num])
        break
    elif int_month == 12 and int_day > 23:
        print(zodiac_name[0])
        break

image.png


16.while循环语句中的if嵌套

n = 0
while zodiac_days[n] < (int_month, int_day):
    n += 1
print(zodiac_name[n])

image.png

索引错误


17.字典的定义和常用操作

字典

dict1 = {}
print(type(dict))
dict2 = {'x': 1, 'y': 2}
dict2['z'] = 3
print(dict2)

image.png

# 小写的u表示unicode编码
zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
               u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
# 月份和日期同时进行存储
zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23),
               (10, 23), (11, 23), (12, 23))

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

# 用户输入月份和日期
year = int(input('请输入年份:'))
int_month = int(input("请输入月份:"))
int_day = int(input('请输入日期:'))

n = 0
while zodiac_days[n] < (int_month, int_day):
    if int_month == 12 and int_day > 23:
        break
    n += 1
print(zodiac_name[n])

# 输出生肖和星座
print('%s年的生肖是%s' % (year, chinese_zodiac[year % 12]))

image.png

# 小写的u表示unicode编码
zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
               u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
# 月份和日期同时进行存储
zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23),
               (10, 23), (11, 23), (12, 23))

chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊'

cz_num = {}
for i in chinese_zodiac:
    cz_num[i] = 0

z_num = {}
for i in zodiac_name:
    z_num[i] = 0


while True:
    # 用户输入月份和日期
    year = int(input('请输入年份:'))
    int_month = int(input("请输入月份:"))
    int_day = int(input('请输入日期:'))

    n = 0
    while zodiac_days[n] < (int_month, int_day):
        if int_month == 12 and int_day > 23:
            break
        n += 1
    # 输出生肖和星座
    print(zodiac_name[n])
    print('%s 年的生肖是 %s' % (year, chinese_zodiac[year % 12]))

    cz_num[chinese_zodiac[year % 12]] += 1
    z_num[zodiac_name[n]] += 1

    # 输出生肖和星座的统计信息
    for each_key in cz_num.keys():
        print('生肖 %s 有 %d' % (each_key, cz_num[each_key]))

    for each_key in z_num.keys():
        print('星座 %s 有 %d' % (each_key, z_num[each_key]))

image.png


18.列表推导式和字典推导式

# 1到10所有偶数的平方
alist = []
for i in range(1, 11):
    if i % 2 == 0:
        alist.append(i * i)

print(alist)

blist = [i * i for i in range(1, 11) if i % 2 == 0]

print(blist)

列表生成式

z_num = {}
for i in zodizc_name:
    z_num[i] = 0

# 将字典中的每一个元素全部赋值为0
z_num = {i: 0 for i in zodizc_name}

19.文件的内建函数

文件操作

文件操作

# 将小说的主要人物记录在文件中
# 默认是以只读的方式打开文件
file1 = open('name.txt', 'w')
# open(mode='r')
file1.write('诸葛亮')
file1.close()

# 写入文件  -- 输出
# open() -> write() -> close()
# 读取文件  -- 输入
# open() -> read() -> close()

file2 = open('name.txt')
print(file2.read())
file2.close()

image.png

file3 = open('name.txt', 'a')
file3.write('刘备')
file3.close()

继续写入


20. 文件的常用操作

name文件

# 读取一行
file4 = open('name.txt', 'r')
print(file4.readline())

结果

一次读取多行,逐行处理

file5 = open('name.txt')
for line in file5.readlines():
    print(line)
    print('-------------')

结果

刚开始时文件指针指向文件开头,随着不断处理,指针移动。
tell()函数可以确定指针的位置

file6 = open('name.txt')
print('当前文件指针的位置%d' % file6.tell())
print('当前读取到了一个字符,字符的内容是 %s' % file6.read(1)) # 只读取文件中的一个字符
print('当前指针的位置%d' % file6.tell())

# 移动到文件开头
file6.seek(0)
print(file6.tell())
file6.read(1)
print(file6.tell())

image.png

seek(arg1, arg2)以中间位置进行前后偏移
seek()第一个参数表示代表偏移位置,第二个参数0表示从文件头开始,1表示从当前位置偏移,2从文件结尾


21. 异常的检测和处理

异常

# NameError命名错误
# i = j

# SyntaxError:invalid syntax 语法错误
# print())

# IndexError
# a = '123'
# print(a[3])

# KeyError
# d = {'a':1, 'b':2}
# print(d['c'])


# 用户输入的错误
# ValueError
# year = int(input("input year:"))

# 根据提示内容的不同进行响应的捕获操作
try:
    year = int(input('input year:'))
except ValueError:
    print('年份要输入数字')

捕获异常

# AttributeError属性错误
# a = 123
# a.append()
# 可以捕获并输出内容
# 捕获多种异常
# except只能接受一个参数,故将结果组合为一个元组
# except (ValueError, AttributeError, KeyError)

try:
    print(1 / 0)
except ZeroDivisionError as c:  # 将提示信息重命名为一个变量
    print('0不能做除数%s' % c)  # 打印错误信息

image.png

try:
    print(1 / 'a')
except Exception as e:  # 捕获所有异常
    print('%s' % e)  # 输出错误的提示信息

image.png

# 自定义错误的提示信息
try:
    raise NameError('HelloError')
except NameError:
    print('my custom error')

image.png

# finally不管是否产生错误都要执行--文件操作
try:
    a = open('name.txt')
except Exception as e:
    print(e)
finally:
    a.close()

文件操作总结


22.函数的定义和常用操作

函数

def func(filename):
    print(open(filename).read())
    print('test func')


func('name.txt')
import re


# 接收名字,返回次数
def find_item(hero):
    with open('sanguo.txt', encoding='GB18030') as f:
        data = f.read().replace('\n', '')
        name_num1 = re.findall(hero, data)  # hero在data中出现的次数
        # print('主角 %s 出现 %s 次' %(hero, len(name_num1)))
    return len(name_num1)


# 读取人物的信息
name_dict = {}
with open('name.txt') as f:
    for line in f:
        names = line.strip('|')
        for n in names:
            # print(n)
            name_num = find_item(n)
            name_dict[n] = name_num

23. 函数的可变长参数

# 用关键字指定参数
print('abc', end='\n\n')
print('abc')


def func(a, b, c):
    print("a= %s" % a)
    print("b= %s" % b)
    print("c= %s" % c)


# 可以忽略顺序,更明确函数调用的意义
func(1, c=3, b=2)


# func(1, c=3)

# 取得参数的个数
def howlong(first, *other):
    print(1 + len(other))


howlong(1223)
howlong(123, 234, 456)

image.png


24. 函数的变量作用域

var1 = 123


# 函数内部的变量只影响内部的情况
def func():
    # var1 = 456
    global var1
    var1 = 456
    print(var1)


func()
print(var1)

global


25.函数的迭代器与生成器

list1 = [1, 2, 3]
it = iter(list1)
print(next(it))  # next函数取下一个值
print(next(it))  # 输出下一个元素 -- 此处为第二个
print(next(it))
# print(next(it)) -->产生异常

迭代器
image.png

# 生成器 -- 带yield的迭代器
# for i in range(10, 20, ):
#     print(i)

def frange(start, stop, step):
    x = start
    while x < stop:
        yield x  # 生成器,运行到此处会暂停
        x += step


for i in frange(10, 20, 0.5):
    print(i)

image.png


26.lambda表达式

def true(): return true()


true()
lanbda: True


def add(x, y):
    return x + y


lambda x, y: x + y

lambda x: x <= (month, day)


def func1(x):
    return x <= (month, day)


lambda item: item[1]


def func2(item):
    return item[i]

27.python的内建函数

filter(), map(), reduce(), zip()
filter

官方文档

filter()将满足(函数)条件的迭代器取出来

a = [1, 2, 3, 4, 5, 6, 7]  # 利用filter来对列表进行过滤
print(list(filter(lambda x: x > 2, a)))

image.png

map()将多个参数依次进行处理
map

reduce()
reduce

zip()
zip
zip


28.闭包的定义

闭包和装饰器
闭包也是函数

闭包的思想来源于函数的嵌套

def func():
    a = 1
    b = 2
    return a + b


# 外部函数
# 外部函数中的变量a被内部函数引用
def sum(a):
    # 内部函数
    def add(b):
        return a + b

    return add


num1 = func()

num2 = sum(2)

print(type(num1))
print(type(num2))

类型不同

num2 = sum(2)
print(num2(4))

image.png

用闭包实现计数器的功能

def counter():
    cnt = [0]

    def add_one():
        cnt[0] += 1
        return cnt[0]

    return add_one


# 每调用一次加1
num1 = counter()

print(num1)

print(num1())
print(num1())
print(num1())

结果

def counter(FIRST=0):
    cnt = [FIRST]

    def add_one():
        cnt[0] += 1
        return cnt[0]

    return add_one


# 从FIRST开始
num5 = counter(5)
num10 = counter(10)
print(num5())
print(num5())
print(num5())

print(num10())
print(num10())

image.png


29.闭包的使用

def a_line(a, b):
    def arg_y(x):  # 内部函数引用到了外部变量a,b
        return a * x + b

    return arg_y


# a = 3, b = 5
# x = 10, y = 35

# line1的类型是arg_y
line1 = a_line(3, 5)
print(line1(10))
print(line1(20))  # 得到新的结果

# 再创建一条新的直线
line2 = a_line(5, 10)
print(line2(10))
print(line2(20))


# 定义一个普通函数来实现此功能
def line_re(a, b, x):
    return a * x + b

闭包


30.装饰器的定义

在函数中增加相应的功能,又不想增加额外的代码。-- 使用装饰器来实现
timesleep()``time()1970年一月1日到现在时间统计

import time


# print(time.time())
# time.sleep(3)
# print(time.time())


def i_can_sleep():
    time.sleep(3)


start_time = time.time()
i_can_sleep()
stop_time = time.time()
print(f'函数运行了{stop_time - start_time}秒')

装饰器

import time


# print(time.time())
# time.sleep(3)
# print(time.time())


def timer(func):
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print(f'函数运行了{stop_time - start_time}秒')
    return wrapper


# timer为装饰函数
# i_can_sleep为被装饰函数
# 额外的功能可以被封装到封装到装饰函数timer中
@timer
def i_can_sleep():
    time.sleep(3)


# 实际上为timer(i_can_sleep())
i_can_sleep()

# 闭包传递的是变量
# 装饰器传递的是函数

结果一致


31.装饰器的使用

def tips(func):
    def nei(a, b):
        print('start')
        func(a, b)
        print('stop')

    return nei


@tips
def add(a, b):
    print(a + b)


print(add(4, 5))


@tips
def sun(a, b):
    print(a - b)


print(sun(3, 4))

image.png

给装饰器带上相应的参数,以让其来适应不同的函数

def new_tips(argv):
    def tips(func):
        def nei(a, b):
            print('start %s' % argv)
            func(a, b)
            print('stop')

        return nei
    return tips


@new_tips('add')
def add(a, b):
    print(a + b)


print(add(4, 5))


@new_tips('sub')
def sub(a, b):
    print(a - b)


print(sub(3, 4))

image.png

def new_tips(argv):
    def tips(func):
        def nei(a, b):
            print('start %s %s' % (argv, func.__name__))
            func(a, b)
            print('stop')

        return nei
    return tips


@new_tips('add_module')
def add(a, b):
    print(a + b)


print(add(4, 5))


@new_tips('sub_module')
def sub(a, b):
    print(a - b)


print(sub(3, 4))

image.png


32.自定义上下文管理器

fd = open('name.txt')
try:
    for line in fd:
        print(line)
finally:
    fd.close()

with open('name.txt') as f:
    for line in f:
        print(line)

总结


33.模块的定义

模块

import os
import time
time.sleep(2)
time.time()

# 重命名
import matplotlib as m
# m.

# 不推荐
from matplotlib import pylab

from time import sleep

sleep()

my_mod

def print_me():
    print('me')


# print_me()

module_test.py

import my_mod as mm

mm.print_me()

结果


34.PEP8编码规范

Python之禅

官网规范

autopep-8
image.png

image.png


35.类与实例

面向过程

user1 = {'name': 'tom', 'hp': 100}
user2 = {'name': 'jerry', 'hp': 80}


def print_role(rolename):
    print('name is %s, hp is %s' % (rolename['name'], rolename['hp']))


print_role(user1)

image.png

面向对象

class Player(object):  # 定义一个类
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def print_role(self):  # 定义一个方法
        print('%s : %s' % (self.name, self.hp))


user1 = Player('tom', 100)  # 类的实例化
user2 = Player('jerry', 80)
user1.print_role()
user2.print_role()

输出

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值