表达式 |
运算结果 |
说明 |
9 + 4 |
13 |
加法 |
9 - 4 |
5 |
减法 |
9 * 4 |
36 |
乘法 |
9 / 4 |
2.25 |
数学除法 |
9 // 4 |
2 |
取整除法 |
9 % 4 |
1 |
取余(模运算) |
2**10 |
1024 |
乘方,2的10次方 |
36**0.5 |
6 |
乘方运算的特例:平方根 |
7+9**0.5 |
10.0 |
乘方的优先级高 |
(7+9)**0.5 |
4.0 |
括号改变优先级 |
文章摘要:关于怎么学习python这件事我们展开了深度学习,并在下面总结出了部分代码,仅供参考
python基础知识+ 运用
print("hello")
for i in range(10):
print("i = %d" %i)
采用 # 进行单行注释,采用‘’‘ This is comment''' 来完成多行注释。(Remark: 在pycharm中可以采用 ctrl + / 完成对程序的注释,同时对于已经注释的程序,则再次 ctrl+/ 可以取消注释)''' 多行注释'''
python对程序中的小写敏感。
3.1 变量名:一般采用驼峰命名法。首字母小写,后面的单词首字母大写,例如 "printFunction"
3.2 类名建议首字母大写
3.3 Python中33个保留字,不能重名:def , class, if , for , while, not , and , pass 等
5.1. python中变量可以直接进行赋值 (str int float bool type(valueName)) True False
(C++ true false)
a_float = 1.2
print(type(a_float))
b_str = "hello"
print(type(b_str))
print(type(person))
a_int = 1
print(type(a_int))
5.2. 不同数据类型可以默认转换 强制类型转换 str(valueName) int(a_str) float(a_float)
print(a_int + a_float)
print(str(a_int + a_float) + a_str)
5.3. python中含有bool型数据类型,即 True, False 判断语句中,True 非零值, False
if (a)
注:输入的一定是字符串
python程序编程
顺序,分支,循环三种程序结构
}
python采用脚本式编程,程序自上而下顺序执行。遇到函数以及类时,跳过不执行。一般我们采用如下语句申明main函数
## program
注:添加编程训练,从键盘输入两个数,判断大小,并输出显示较大的数。
输入第一个数:
输入第二个数:
如果 第一个数大于第二个数:
输出第一个数
再如果 第一个数等于第二个数:
输入有误
否则
输出第二个数
C/C++语言中
for( int i=0 ; i< 6; i++)
{
// program...
}
int i=0
while(i<10)
{
i++;
//program;
}
for i in range(10):
print(i)
以及对应的while循环
while True:
print("hello")
time.sleep(1)
python中的占位符。
常用的range循环结构,重点掌握其中的前四个
序列 |
Python |
C/C++/Java |
[0,1,2,…,9] |
range(10) |
for (i=0; i<=9; i++) |
[0,1,2,…,n-1] |
range(n) |
for (i=0; i |
[n-1, …, 1, 0] |
range(n-1, -1, -1) |
for (i=n-1; i>=0; i--) |
[1,2,…,n] |
range(1, n+1) |
for (i=1; i<=n; i++) |
[1,2,3,4 …… |
import itertoolsfor i in itertools.count(1): |
for (i=1; ; i++) |
小于n的奇数 |
range(1, n, 2) |
for (i=1; i |
所有奇数 |
import itertoolsfor i in itertools.count(1,2): |
for (i=1; ; i=i+2) |
输出1--100之间能够被3整除的整数:
for num in range(100):
if num%3==0:
print(num,end='\t')
python函数的定义
print(fool(1,2))
c,d = fool(1,2)
python中的类
......
练习题目:创建一个汽车类,包含有汽车的名字,车长,车重, 并创建实现方法显示其中的属性。
练习题目: 在游戏中为了增加互动性,通常会创建一个游戏角色,该角色具有一定的属性,比如性别,名字,初始生命值。 我们假设,当受到一次攻击时,生命值会减少10, 当生命值小于等于0时,角色死亡;当击打别人一次,经验值增加10, 当经验值大于50的时候,升级。请编程模拟该过程。初始人物为 {” Little Boy“, male, 100}, 受到2次攻击,同时击打别人5次的过程。
类中的继承 待补充
python中采用import导入外部pack或者外部程序
练习从另一个.py文件中,引入变量,函数,类。
例:从键盘输入两个整数,调用四个函数,分别显示输出+-*/(加减乘除)
def functionAdd(num1,num2): #加法
return num1+num2
def functionSub(num1,num2): #减法
return num1-num2
def functionMul(num1,num2): #乘法
return num1*num2
def functionDiv(num1,num2): #除法
if not num2:
return 99999
return num1/num2
if __name__=='__main__':
#请输入数字
num1= int(input('Please input a number:'))
num2= int(input('Please input a number:'))
#打印加减乘除的结果
print(functionAdd(num1,num2))
print(functionSub(num1,num2))
print(functionMul(num1,num2))
#除法判断是否有误
divResult =functionDiv(num1,num2)
if divResult ==99999:
print('the second is zero...wrong input')
else:
print(functionDiv(num1,num2))
汽车类型代码
#这是一个Car类
class Car():
'''
kind : 车的品牌
length :车的长度
weight : 车的重量
'''
def __init__(self,kind='BMW',length=4.5,weight=1.6):
self.kind=kind
self.length=length
self.__weight=weight #__weight 表示私有属性 不能直接调用
#显示车的重量
def showWeight(self):
return self.__weight
#初始化Car类
BMW=Car()
#打印车的每个属性
print(BMW.kind)
print(BMW.showWeight())
print(BMW.length)
list 介绍: 列表 a = list(),我们通常采用list来记录中间变量,采用如下方式完成数据的添加和弹出,以及删除
list常用的API函数, max(), min(), len(), list()
函数名 |
功能 |
|
max() |
返回list中的最大值 |
|
min() |
返回list中的最小值 |
|
len() |
返回list的长度 |
|
list() |
将元祖强制转换成一个list |
注:下式中的两句等同
a = list('hello')
b = list("hello")
list中的常用方法(Method), append, count, index, insert, pop, remove, reverse, sort
方法名 |
功能 |
示例 |
append |
从列表末尾追加新元素 |
a_list.append(1) |
count |
统计某元素在列表中出现的次数 |
a_list.count(2) |
index |
返回从列表中查找第一个匹配项的索引值 |
a_list.index(2) |
insert |
在列表中插入某值 |
a_list.insert(3,'m') |
pop |
移除列表最后一个值,返回移除的值 |
a_list.pop() |
reverse |
列表中的所有元素反向排列 |
a_list.reverse() |
sort |
对列表中的元素进行排序(相同数据类型) |
a_list.sort() |
思考题:
c = list([1,2,"h","hello",1.23]), 此时是否存在max(c), min(c), 以及len(c)
a = list()
a.append(1)
a.append(2.3)
a.append("hello")
a.pop()
a.remove(2.3) #指定删除列表中相应的值
list中数据的访问,采用[]的形式对列表的数据进行访问,支持切片访问
a = list()
for i in range(10): #从0-9的10个数
a.append(i)
print(a[1])
print(a[3:6]) #打印列表中[3:6]的数据,其中不含末尾项
Numpy介绍
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
Numpy的导入
import numpy as np
np.array([2,3,4],[1,2,3])可以理解为生成一个两行三列的矩阵
np.zeros((3,2))表示生成一个3行2列的矩阵,
numpy中数组创建函数
函数 |
说明 |
array |
创建一个数组,可以直接指定数据类型 |
arange |
类似于内置的range, 但是返回的是一个ndarray而不是一个列表 |
ones |
全1数组 |
zeros |
全0数组 |
empty |
创建一个新的数组,只分配内存空间但不填充任何值 |
eye/identity |
创建一个N维的单位矩阵 |
numpy中的随机数产生
np.random.rand(2,3) #均匀分布
np.random.randint(2,8,size=(3,2))
np.random.randn(3,3) #正态分布
numpy中的数据类型,dtype进行, 例如
a = np.array([2,1,3],dtype=np.int16 )
名称 |
描述 |
bool_ |
布尔型数据类型(True 或者 False) |
int_ |
默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc |
与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp |
用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 |
字节(-128 to 127) |
int16 |
整数(-32768 to 32767) |
int32 |
整数(-2147483648 to 2147483647) |
int64 |
整数(-9223372036854775808 to 9223372036854775807) |
uint8 |
无符号整数(0 to 255) |
uint16 |
无符号整数(0 to 65535) |
uint32 |
无符号整数(0 to 4294967295) |
uint64 |
无符号整数(0 to 18446744073709551615) |
float_ |
float64 类型的简写 |
float16 |
半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 |
单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 |
双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ |
complex128 类型的简写,即 128 位复数 |
complex64 |
复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 |
复数,表示双 64 位浮点数(实数部分和虚数部分) |
数组属性
属性 |
说明 |
ndarray.ndim |
秩,即轴的数量或维度的数量 |
ndarray.shape |
数组的维度,对于矩阵,n 行 m 列 |
ndarray.size |
数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype |
ndarray 对象的元素类型 |
ndarray.itemsize |
ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags |
ndarray 对象的内存信息 |
ndarray.real |
ndarray元素的实部 |
ndarray.imag |
ndarray 元素的虚部 |
ndarray.data |
包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
重点函数
函数名 |
说明 |
示例 |
reshape |
不改变数据的条件下修改形状 |
a = np.arange(10).reshape(2,5) |
transpose |
对换数组的维度 |
a.transpose() |
squeeze |
从数组的形状中删除一维条目 |
a.squeeze() |
sin()、cos()、tan() |
np中的三角函数 |
|
游戏设计
class Game(): #创建一个类
def __init__(self, name, sex, hp, exp):#定义def函数,__init__类方法中,self只有一个,属性为:name、sex、hp, exp
self.name = name
self.sex = sex
self.hp = hp
self.exp = exp
def showhp(self): #定义def函数,showhp()为类方法
self.hp -= 20 #减运算,当人物被攻击一次是生命值(hp)将会减20
if self.hp <= 0:#判断语句,当人物的生命值小于等于0时,输出打印:your hero is dead...,否则pass
print('your hero is dead...')
else:
pass
return self.hp
def showexp(self): #定义def函数,showexp()为类方法
self.exp += 50 #加运算,当人物被攻击一次经验值(exp)加50
if self.exp == 50:#判断语句,当人物的经验值等于50时,输出打印:你升级了,否则pass
print('你升级了')
else:
pass
return self.exp
if __name__ == '__main__':#main函数
Button = str(input('是否开始游戏 y/n '))
#输入语句,在input中标明y/n,将输入值转换为str类型,赋值给Button变量
if Button == 'y':
Player1 = Game(name='Little Boy', sex='male', hp=100, exp=0
#创建对象Player1,定义人物属性
for i in range(3):#循环语句(for),每循环一次就调用showhp方法,直到循环3次结束
Player1.showhp()
for i in range(5):#循环语句(for),每循环一次就调用showexp方法,直到循环5次结束
Player1.showexp()
else:
pass
print('你剩余的生命值为')
print(Player1.hp) #访问类属性
pandas是强大的结构化数据分析工具,可以用于数据挖掘与数据分析,也可以用于数据清洗。
pandas的数据结构有Serials形式,以及dateframe形式。
import pandas as pd
c = pd.Series([1,2,3,4,6,6,7])
print(c)
import pandas as pd
import numpy as np
c = pd.Series([1,2,3,4,np.nan,6,7])#创建一个索引函数Series的一维数组,nan不是一个数,是一个float类型的数据,所以相关计算都无法得到数字
print(c)
d = pd.DataFrame(np.arange(12).reshape((3,4)))#定义一个数据框,分别是以3行4列,数据是0~12排列组成的数据表
print(d)
df = pd.Series(['a',1,3,5.0])#创建一个索引函数Series的一维数组,包括字符、整型、float类型
print(df)
print(df.index#查看索引,输出打印RangeIndex(start=0, stop=4, step=1),start为起点、stop为终止、step为歩长
print(df.values#返回视图对象,输出打印['a' 1 3 5.0]
s = pd.Series([1,2,3,4,5],index=['a','b','c','d','e']#创建一个索引函数Series的一维数组,然后index作为标量序号
print(s)
s3 = {'h':1,'b':2, 'm':3}#定义一个以h、b、m为1、2、3数值的序号数组
s4 = pd.Series(s3) #将创建好的数组s3利用索引函数Series进行整理赋值给s4
print(s4)
d = pd.read_csv('ab.csv',delimiter=',') #pandas提供了pd.read_csv()方法可以读取其中的数据,返回DataFrame文件,利用逗号(,)隔开
print(d)
d.loc[0,'chinese'] = 60 #索引从第0行开始查chinese成绩等于60分
print(d)
# print(d.loc[0,'chinese']) #输出打印索引从第0行开始查到chinese成绩等于60分
# print(d.iloc[1,:])#通过整数索引第1行号获取行数据,不能是字符
ab.csv中数据如下:
name,chinese,math lihua,98,99 xiaozhang,95,60 xiaoli,100,59 xiaowang,60,86
电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的.
进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。
实现多线程是采用一种并发执行机制.
并发执行机制原理:简单地说就是把一个处理器划分为若干个短的时间片,每个时间片依次轮流地执行处理各个应用程序,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果 [3] 。
多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程。这就是多线程程序 [3] 。
多线程的优势:
1、使用线程可以把占据时间长的程序中的任务放到后台去处理 [4] 。
2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 [4] 。
3、程序的运行速度可能加快 [4] 。
4、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等 [4] 。
5、多线程技术在IOS软件开发中也有举足轻重的作用 [4]
多线程的缺点:
1、如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换 [4] 。
2、更多的线程需要更多的内存空间 [4] 。
3、线程可能会给程序带来更多“bug”,因此要小心使用 [4] 。
4、线程的中止需要考虑其对程序运行的影响 [4] 。
5、通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生 [4]
注: 本部分知识在本节课中并不做重点介绍
多线程主要API
函数名 |
作用 |
示例 |
threading.Thread |
创建一个线程,并绑定一个回调函数 |
thread1=threading.Thread(target=functionName) |
setDaemon |
设置是否开启后台运行 |
thread1.setDaemon(True) |
start |
开启线程运行 |
thread1.start() |
def printHello():
while True:
print("This is the hello threading...")
time.sleep(1)
def printNihao():
while True:
print("This is the Nihao threading...")
time.sleep(2)
if __name__ == '__main__':
t1 = threading.Thread(target=printHello)
t2 = threading.Thread(target=printNihao)
t1.setDaemon(False)
t2.setDaemon(False)
t1.start()
t2.start()
print("main threading ended...")
倒计时游戏, 从60开始进行循环倒计时,每一秒自减一,按下按键‘b',开始倒计时并显示, 按下按键’t'停止倒计时。
import time
import threading
begin = False
def numCounter():
num = 60
global begin
while True:
if begin:
num = num -1
print(f'num={num}, begin={begin}')
time.sleep(1)
if num<=0:
num = 60
else:
pass
def keyDectect():
# TODO:need to be revised by using the threading lock
global begin
while True:
key = input()
if key == 'b':
begin = True
elif key == 't':
begin = False
else:
print('wrong input..')
if __name__ == '__main__':
t1 = threading.Thread(target=numCounter)
t2 = threading.Thread(target=keyDectect)
t1.setDaemon(False)
t2.setDaemon(False)
t1.start()
t2.start()