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

Python入门

  • Python介绍
  • Python基本语法
    • 标准数据类型
    • Python 的print
    • Number(数字)
      • Python 的变量赋值可以写在一行上
      • 变量的定义、类型、与运算
    • String(字符串)
    • Python 的判断语句
    • python的循环
    • List(列表)
    • 字典、集合、元组
    • 函数
    • Python求素数
    • Python归并排序
  • txt文件的读写
    • 迭代器与可迭代对象
      • 为什么要有迭代器
      • 可迭代对象
      • 迭代器对象
      • 文件类型是迭代器对象
    • 文件的读写
      • open() 方法
      • File对象的属性
      • file对象常用函数
        • File.close()
        • File.read()
        • File.readline()
        • File.seek()
        • File.tell()
        • File.write()
  • 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 爬虫工具常用的库
Requests http库
PIL 图像处理
matplotlib 绘制数据图的库。对于数据科学家或分析师非常有用
OpenCV 计算机视觉
numpy 科学计算
tkinter GUI库
Pygame 2D游戏

库怎么安装

打开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)

你可能感兴趣的:(基础入门,软件,物联网)