2021年信息学部物联网工程学院学生科协第三次软件大培训(python)

Python介绍

Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
优点:

  1. 简单
  2. 易学
  3. 易读、易维护
  4. 用途广泛
  5. 速度快
  6. 免费、开源
  7. 高层语言
  8. 可移植性
  9. 解释性
  10. 面向对象
  11. 可扩展性、可扩充性
  12. 可嵌入性
  13. 丰富的库
  14. 规范的代码
  15. 高级动态编译

缺点:慢

Python基本语法

标准数据类型

Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

Python 的print

首先 Python不需要分号,用换行来代替分号。
python 的print十分简单,默认是自动换行的。

print(1)
print(2)
print(3

如果不要换行,可以用end自行调整

print(1,end="")
print(2,end="")
print(3,end="")

print()

print(1,end=" ")
print(2,end=" ")
print(3,end=" ")

print()

print(1,end=",")
print(2,end=",")
print(3,end=",")

print()

print(1,end="我是间隔")
print(2,end="我是间隔")
print(3,end="我是间隔")

Number(数字)

Python 的变量赋值可以写在一行上

a, b = 1, 2
print(a," ",b)

变量的定义、类型、与运算

Python 定义变量时不需要显式地标明数值类型,变量的数值类型与你的赋值有关

a, b, c, d= 1, 2.0, 2.1, 3.2
print(type(a)," ",type(b))

强制类型转换(只有四种数值类型)

a, b, c, d= float(a), int(b), bool(c), complex(d)
print(type(a)," ",type(b)," ",type(c)," ",type(d))

数字运算,加减乘除,次方,取余

a, b = 3,4
print(a+b," ",a-b," ",a*b," ",a/b," ",a**b," ",a%b)

String(字符串)

可以通过“+”号连接字符串

a, b = "你好", "世界"
print(type(a))
a = a + b
a += "!"
print(a)

但String不能更改
错误:a[1] = “好”

Python 的判断语句

一定不需要大括号,小括号随意
必须有冒号,必需要换行,必须要缩进四个空格键

a = 1

if(a == 1):
    print(a)
    
if a == 2:
    print(a+1)
else:
    print(a+2)
    
if a == 2:
    print(a+3)
elif a == 1: #else if 语句
    print(a+4)

python的循环

一般用while循环,或者for循环

a = 1
while(a<10):
    a += 1
    print(a,end=" ")
print()

for i in range(10):
    a -= 1
    print(a,end=" ")
print()

break语句也和c语言一样

a = 1
while(a<1000):
    a += 1
    print(a,end=";")
    if a > 10:
        print("break了")
        break
        
for i in range(1000):
    a += 1
    print(a,end=";")
    if a > 20:
        print("break了")
        break

List(列表)

mylist = [1,2,3,4]
print(mylist," \n长度:",len(mylist))

list可以在其末尾加上新的元素,并且对其类型没有要求

mylist = []
mylist.append(1)
mylist.append(1.0)
mylist.append("我是字符串")
mysublist = []
mylist.append(mysublist)
print(mylist)

可以用索引来访问list的内容

mylist = [1,2,3,4,5,6,7,8,9,10]
print(mylist)
print(mylist[1])

for循环
有一个东西叫遍历

mylist = [1,2,3,4,5,6,7,8,9]
for dongxi in mylist:
    print(dongxi,end="。")

python里没有数组,一般把list当作数组用
例如需要一个长5,每个数为0的数组:

array = []
for i in range(5):
    array.append(0)
print(array)

例如需要一个长2*3的数组:

array = []
for i in range(2):
    subarray = []
    for j in range(3):
        subarray.append(i*3+j)
    array.append(subarray)
print(array)

字典、集合、元组

了解一下

#python 还有字典
mydict = {1:12,3:21}
print(mydict[1])
#python 还有集合
myset = {12,21}
print(myset)
#python 还有元组
mytuple = (1,2)
print(mytuple[1])

函数

同样不能有大括号,用冒号加缩进来表示范围

def hanshu1():
    print("我是函数")
hanshu1()

有参数的函数

def hanshu2(canshu):
    print("我是",canshu,"的函数")
hanshu2("有参数")

函数的参数可以设默认值

def hanshu3(canshu="默认参数"):
    print("我的参数是:",canshu)
hanshu3()
hanshu3("你给我的参数")

#递归的函数
例子:斐波那契数列

def digui(n):
    if n == 1:
        return 1
    if n == 0:
        return 1
    return digui(n-1) + digui(n-2)

for i in range(10):
    print(f(i),end=";")

Python求素数

随便写的求素数的函数
python相对比较慢,建议输入不要超过1000万
数很多的话,就不要print了(:_:)

import math
def getPrimeNumber(n,printOutPut=False):
    recoder = [0 for i in range(n+1)];
    recoder[0] = 1
    recoder[1] = 1
    for i in range(1,int(math.sqrt(n))+1):
        if recoder[i] == 0:
            j = i + i
            while(j <= n):
                recoder[j] = 1
                j += i
    out = []
    for i in range(1,n+1):
        if recoder[i] == 0:
            out.append(i);
            if printOutPut:
                print(i)
    return out

primeNumbers = getPrimeNumber(1000000,False)
print("素质个数:",len(primeNumbers))
for primeNumber in primeNumbers:
	print(primeNumber)

Python归并排序

随便写的排序函数
python比较慢,建议排序的数的个数不要超过100万
同上,数很多的话,就不要print了(:_:)

def Sort(array):
    def mergeSort(lo,hi):
        if hi-lo<=1:
            return 0
        mid = int((lo+hi)/2)
        mergeSort(lo,mid)
        mergeSort(mid,hi)
        temp = []
        p1, p2 = lo, mid
        while(p1<mid or p2<hi):
            if p1 >= mid:
                temp.append(array[p2])
                p2 += 1
            elif p2 >= hi:
                temp.append(array[p1])
                p1 += 1
            elif(array[p1]<array[p2]):
                temp.append(array[p1])
                p1 += 1
            else:
                temp.append(array[p2])
                p2 += 1
        array[lo:hi] = temp[:]
    l = len(array)
    mergeSort(0,l)

def getRandomArray(length=100):
    import random
    Array = []
    for i in range(length):
        Array.append(random.randint(0,1000))
    return Array

def check(array):
    p = array[0]
    for i in array:
        if i < p:
            print("错了,wwww")
            return 0
        p = i
    print("正确,你真棒,666,太强了")
    
def printArray(array,end=" "):
    for i in array:
        print(i,end=end)

Array = getRandomArray(length=100000)
Sort(Array)
check(Array)
# printArray(Array,";")

txt文件的读写

迭代器与可迭代对象

for循环遍历的原理

for循环遍历的原理就是迭代,in后面必须是可迭代对象

为什么要有迭代器

对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器。

可迭代对象

__iter__法的对象,都是可迭代对象,有以下6种

可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象

迭代器对象

可迭代的对象执行__iter__方法得到的返回值是迭代器对象。

迭代器对象指的是即内置有__iter__又内置有__next__方法的对象

list=[1,2,3,4]
for x in list:
    print (x, end=" ")   #两者都可以被for循环迭代
print("\n")

it = list.__iter__()
for x in it:
    print (x, end=" ")
print("\n")

print(type(list))   #对比两者的类型
print("\n")
print(type(it))

it = list.__iter__()
# print(list.__next__+"\n")  #可迭代对象不能用next()方法
print(it.__next__)

文件类型是迭代器对象

open('a.txt').__iter__()
open('a.txt').__next__()

总之,迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

这里放一篇讲的很通俗易懂的文章

python迭代器生成器-迭代器和list区别 - zx125 - 博客园 (cnblogs.com)

文件的读写

open() 方法

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

**注意:**使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

open(file, mode='r')

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

这里只是部分的组合,感兴趣的可以自己再去做了解

File对象的属性

一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:

属性描述
file.closed返回true如果文件已被关闭,否则返回false。
file.mode返回被打开文件的访问模式。
file.name返回文件的名称。

file对象常用函数

File.close()

close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。

当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。

# 打开文件
fo = open("esta.txt", "w")
print("文件名为: ", fo.name)

# 关闭文件
fo.close()
File.read()

read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。

参数

  • size – 从文件中读取的字节数,默认为 -1,表示读取整个文件。

返回值

返回从字符串中读取的字节。

# 打开文件
fo = open("esta1.txt", "rt",encoding='utf-8')  
# 在python中默认的编码方式是 “ gbk ”,
# 而Windows中的文件默认的编码方式是 “ utf-8 ” ,
#所以导致python编译器无法成功读取或写入文件内容。

print("文件名为: ", fo.name)

#line = fo.read(10)
line = fo.read(13)
print("读取的字符串: %s" % (line))

# 关闭文件
fo.close()
File.readline()

readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。

参数

  • size – 从文件中读取的字节数。

返回值

返回从字符串中读取的字节。

# 打开文件
fo = open("esta1.txt", "r+",encoding='utf-8')
print("文件名为: ", fo.name)

line = fo.readline()
print("读取第一行 %s" % (line))

line = fo.readline(4)
# line = fo.readline(6)
print("读取的字符串为: %s" % (line))

# 关闭文件
fo.close()
File.seek()

seek() 方法用于移动文件读取指针到指定位置。

语法

seek() 方法语法如下:

fileObject.seek(offset[, whence])

参数

  • offset – 开始的偏移量,也就是代表需要移动偏移的字节数
  • **whence:**可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起

返回值

如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。

# 打开文件
fo = open("esta2.txt", "rb+")   
#在文本文件中,没有使用b模式选项打开的文件,
#只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常。
#所以这里以二级制模式打开‘b’

print("文件名为: ", fo.name)
 
line = fo.read(5)
print("读取的数据为: %s" % (line))
 
# 重新设置文件读取指针到开头
fo.seek(4, 0)
line = fo.read(5)
print("读取的数据为: %s" % (line))

# 关闭文件
fo.close()
File.tell()

概述

tell() 方法返回文件的当前位置,即文件指针当前位置。

语法

tell() 方法语法如下:

fileObject.tell()

参数

返回值

返回文件的当前位置。

# 打开文件
fo = open("esta2.txt", "r+")
print ("文件名为: ", fo.name)

line = fo.read(5)
print ("读取的数据为: %s" % (line))

# 获取当前文件位置
pos = fo.tell()
print ("当前位置: %d" % (pos))


# 关闭文件
fo.close()
File.write()

概述

write() 方法用于向文件中写入指定字符串。

在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。

如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。

语法

write() 方法语法如下:

fileObject.write( [ str ])

参数

  • str – 要写入文件的字符串。

返回值

返回的是写入的字符长度。

# 打开文件
fo = open("esta3.txt", "w+")
print ("文件名为: ", fo.name)
str = "esta666\nesta666"
fo.write( str )

fo.seek(0,0)
line = fo.read()
print ("读取的数据为: %s" % (line))

# 关闭文件
fo.close()

Python常用库

库是什么

库的概念是具有相关功能模块的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。
python模块:包含并且有组织的代码片段为模块。
表现形式为:写的代码保存为文件。这个文件就是一个模块。sample.py 其中文件名smaple为模块名字。

库有哪些(内置库)

名称作用
datetime为日期和时间处理同时提供了简单和复杂的方法
zlib直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile
random提供了生成随机数的工具
math为浮点运算提供了对底层C函数库的访问
sys工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量
glob提供了一个函数用于从目录通配符搜索中生成文件列表
os提供了不少与操作系统相关联的函数
urlib获取网页源码

库有哪些(第三方库)

名称作用
Scrapy爬虫工具常用的库
Requestshttp库
PIL图像处理
matplotlib绘制数据图的库。对于数据科学家或分析师非常有用
OpenCV计算机视觉
numpy科学计算
tkinterGUI库
Pygame2D游戏

库怎么安装

打开cmd命令窗口,通过命令 pip install 包名 进行第三库安装,此方法简单快捷。

库的导入

#导入一个模块import somemodule(模块)
somemodule.somefunction()   #调用该模块的某个函数
#从模块中导入(一些)函数
from somemodule import somefunction[,anotherfunction,...]
somefunction()     
#给模块指定别名
import somemodule as mm.somefunction()
#导入模块中的一切函数
from somemodule import *somefunction()
#导入一个函数并指定别名
from somemodule import somefuntion as ff()

库的实例使用

import time

#1.0获得当前时间戳,是从1970年某一个时刻到今天的秒数
print(time.time())
#1.1易于阅读的时间:(被保存为字符串形式)
print(time.ctime())
#1.2易于计算机阅读的时间(保存为struct结构)
print(time.gmtime())
# 此外,python还提供了时间的标准化输出。
t = time.gmtime()
strtime = time.strftime("%Y-%m-%d %H:%M:%S",t)
# time库通过time.perf_counter来获得当前时间戳,保存为浮点型
start = time.perf_counter()
# 用这个函数,我们可以计算程序执行的过程中的时间
#time.sleep(2)
end = time.perf_counter()
print(end - start)
import numpy as np
#或
from numpy import *

x=np.array([[1.0,0.0,0.0],[0.,1.,2.]])

a = np.random.randn(10)
b = np.random.normal(0, 1, (2,4))
c = np.random.rand(2,3)
d = np.random.uniform(-1,1,10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值