用Python玩数据-笔记整理-第二章
条件结构:
if语句:
if expression:
#比较/成员/逻辑运算符
expr_true_suite
#代码块必须缩进4个空格
else语句:
if expression:
expr_true_suite
else:
expr_false_suite
#代码块必须缩进4个空格
elif语句:
if expression:
expr_true_suite
elif expression2:
expr2_true_suite
elif expression3:
expr3_true_suite
:
:
else:
expr_false_suite
条件嵌套:
在条件语句中嵌套条件语句;
同等缩进为同一条件的结构;
猜数字游戏: 一次猜
# Filename : guessnum1.py
from random import randint
#引入math库
x = randint(0, 300)
#随机获取一个范围内的数字
digit = int(input('Please input a number between 0~300: '))
if digit == x :
print('Bingo!')
elif digit > x:
print('Too large, please try again.')
else:
print('Too small, please try again.')
#进行条件判断
循环结构:
range()语句:
range(start,end,step)
#start:起始值,缺省时默认为0
#end:终值
#step:步长,缺省时默认为1,默认值下,得到的对象数是end-start
#返回值为可迭代值
xrange()语句:
和range()语法基本一致,类似于生成器(generator),用多少生成多少,适合处理大数据;
在Python3.x中range()和xrange()合并,返回都是生成器;
while循环:
while expression:
#条件表达式
suite_to_repeat
for循环:
for iter_var in iterable_object:
#iterable_object可迭代对象可以是string/list/tuple/dictionary/file
suite_to_repeat
#可以明确循环次数,常用于遍历数据集的成员,如列表、生成器表达式
猜数字游戏改进:多次猜
# Filename : guessnum2.py
from random import randint
x = randint(0, 300)
for count in range(5):
#增加循环结构,扩展猜的次数
digit = int(input('Please input a number between 0~300: ')))
if digit == x :
print('Bingo!')
elif digit > x:
print('Too large, please try again.')
else:
print('Too small, please try again.')
break语句:跳出当前循环;
质数(Prime number)又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数);
比1大但不是素数的数称为合数。1和0既非素数也非合数;
质数在公钥加密算法(如RSA)中有重要的地位;
素数判断1:
# Filename : prime.py
from math import sqrt
j = 2
while j <= 100:
i = 2
k= sqrt(j)
while i<= k: #i是作被除数检验j是否是素数
if j%i== 0: break #如果j可以被i整除,则不是素数,退出循环
i = i+1 #如果j不能被i整除,则i一直加1,直到最后i=k退出循环;
if i> k: #判断i是否被除到了最后;
print(j, end = ' '))
j += 1
素数判断2:
# Filename : prime.py
from math import sqrt
for i in range(2,101):
#遍历i从2到100
flag = 1
k = int(sqrt(i))
for j in range(2,k+1):
#遍历j从2到k
if i%j == 0:
flag = 0
break
#如果判断数i可以被被除数j整除,则该数不是素数,将flag置0
if(flag):
print(i, end = ' ')
continue语句:跳出当次循环,进入下次循环;
猜数字游戏进一步改进:想停就停
# Filename : guessnum3.py
from random import randint
x = randint(0, 300)
go = 'y'
while(go == 'y'):
digit = int(input('Please input a number between 0~300: '))
if digit == x :
print('Bingo!')
break
elif digit > x:
print('Too large, please try again.')
else:
print('Too small, please try again.')
print('Input y if you want to continue.')
go = input()
#判断输入的内容进行while判断
print(go)
else:
print('Goodbye!')
循环else语句:
正常结束循环,则执行else中的代码;
当循环从break处终止,则跳出循环,不执行else中的代码;
自定义函数:
def function_name([arguments]):
#括号之间是所有可选的参数,即使没有括号也不能省略小括号
#如果有参数,参数不能省略掉
"optional documentation string"
#文档字符串,表示注释
function_suite
素数判断3:
# Filename : prime.py
from math import sqrt
#自定义函数判断素数isprime(x)
def isprime(x):
if x == 1:
return False
#1不是素数
k = int(sqrt(x))
for j in range(2,k+1):
if x%j== 0:
return False
return True
#取在2到判断数x的根号之间的数,作被除数,与x相除
fori inrange(2,101):
if isprime(i):
print(i, end = ' ')
默认字参数:
可以给函数的参数定义一个默认值,以赋值语句的形式提供;
默认参数值可以在调用函数时发生改变;
默认参数一般需要放在参数列表的最后,以防止产生歧义;
def num(x=68,y=True):
if y:
print('')
print(x,'') >>>num()
1
682
关键字参数:
调用函数时可以直接写上参数的标识符来给参数赋值;
关键字参数是让使用者调用参数名来区分参数;
def num(x,y):
if y:
print(y,'')
print(x,'') >>>num(68,False)
682
>>>num(y=False,x=68)
682
#允许改变参数列表中的参数顺序;
>>>num(y=False,68)
SyntaxError
>>>num(x=68,False)
SyntaxError
#一旦使用了关键字参数,就要全部使用关键字参数;
默认参数一般在函数定义时使用,关键字参数一般在函数调用时使用;
传递函数:把函数名当成一个普通参数传给另一个函数;
匿名函数:lambda函数
def add(x,y): return x+y add = lambda x,y : x+y
递归:
函数调用自身函数的方法;
最能表现计算机思想的方法;
递归必须要有边界条件,即停止递归的条件;
执行效率远低于循环,占用很大的内存;
汉诺塔游戏:
# Filename : Hanoi.py
def hanoi(a,b,c,n):
if n==1:
print(a,'->',c)
else:
hanoi(a,c,b,n-1)
print(a,'->', c)
hanoi(b,a,c,n-1) hanoi('a','b','c',4)
变量作用域:
全局变量:在程序代码主体部分的变量;使用global定义;
局部变量:在函数中的变量;
全局变量和局部变量用同一个名字时,遵循”内层屏蔽外层“的原则;
math库:
dir(math)可以查看标准库里的所有函数;
help(math.ceil)可以查看函数的定义;
ceil():向上四舍五入;
floor():向下四舍五入;
pow():求平方;
sqrt():求根号;
degrees():将弧度转成角度;
radians():将角度转成弧度;
os库:
getcwd():获取当前的工作目录;
chdir(path):修改目录;
rename():修改文件名称;
remove():删除文件;
random库:
choice([序列]):从序列当中获取一个随机值;
randint(x,y):生成x到y之间的一个随机数;
randrange():从range()生成的数当中获取一个随机的整数;
random():生成0到1之间的一个随机浮点数;
uniform():生成5到10之间一个随机浮点数;
sample(range(num),x):从给定的range()中随机获取x个数;
shuffle(列表):将列表中的元素打乱;
datetime库:
today():显示今天的日期;
time():创建时间;
datetime():当前的日期和时间,毫秒;
strftime():设置时间的格式;
timestamp():时间戳,从定义的时间开始到现在的时间;
fromtimestamp():将时间戳转换成标准时间;
exception异常:
语法错误
运行时刻错误
逻辑错误
用异常对象来表示异常实例;
异常类:
类名 | 描述 |
BaseException |
所有异常的基类 |
Exception |
常规异常的基类 |
AttributeError |
对象不存在此属性 |
IndexError |
序列中无此索引 |
IOError |
输入输出操作失败 |
KeyboardInterrupt |
用户中断执行 |
KeyError |
映射中不存在此键 |
NameError |
找不到名字 |
SyntaxError |
Python语法错误 |
TypeError |
对类型无效的操作 |
ValueError |
传入无效的参数 |
ZeroDivisionError |
除运算的第二个参数为0 |
回溯:
dir(_builtins_)查看异常类;
BaseException:
异常处理:
用if-else语句处理
ify != 0:
print(x / y)
else:
print('division by zero')
用try-except语句处理
# Filename: exception2.py
try:
num1 = int(input('Enter the first number: '))
num2 = int(input('Enter the second number: '))
print(num1 / num2)
except ValueError:
print('Please input a digit!')
用多个except子句或except块处理
# Filename: exception4.py
try:
num1 = int(input('Enterthefirstnumber: '))
num2 = int(input('Enterthesecondnumber: '))
print(num1 / num2)
except ValueError:
print('Pleaseinput a digit!')
except ZeroDivisionError:
print('Thesecondnumbercannotbezero!')
#另一种写法
except(ValueError, ZeroDivisionError):
print('Invalidinput!')
空except子句:仅仅单用except也可以;
as语句:确定异常类型,可以将其输出;
# Filename: exception7.py
try:
num1 = int(input('Enterthefirstnumber: '))
num2 = int(input('Enterthesecondnumber: '))
print(num1 / num2)
except Exception as err:
print('Somethingwentwrong!')
print(err)
else语句:若没有异常发生时执行else语句;
whileTrue循环:允许异常发生,知道无异常后break跳出循环;
finally子句:不管是否发生异常,finally里的异常都要执行;
# Filename: exception12.py
deffinallyTest():
try:
x = int(input('Enter the first number: '))
y = int(input('Enterthesecondnumber: '))
print(x / y)
return 1
except Exception as err:
print(err)
return 0
finally:
print('Itis a finally clause.')
result = finallyTest()
print(result)
上下文管理器(Context Manager):定义和控制代码块执行前的准备动作及执行后的收尾动作;
with语句:比try-except精简健壮,在操作文件、数据库对象时建议使用with语句;
# Filename: exception13.py
try:
f = open('data.txt')
for line in f:
print(line, end = '')
except IOError:
print('Cannotopenthefile!')
finally:
f.close()
#with写法
with open('data.txt') as f:
for line in f:
print(line, end='')
用Python玩数据-笔记整理-第二章的更多相关文章
- 用Python玩数据-笔记整理-第二章-练习与测试
课间练习: 经典问题的Python编程 按公式:C= 5/9×(F-32) ,将华氏温度转换成摄氏温度,并产生一张华氏0-300度与对应的摄氏温度之间的对照表(每隔20度输出一次) 验证命题:如果一 ...
- 用Python玩数据-笔记整理-第一章
第一个程序:print >>>print("Hallo World!") >>>Hallo World! mystring = "Ha ...
- 用Python玩数据-笔记整理-第一章-练习与测试
编程题: 简单的输入输出:编程实现输入姓.名的提示语并接受用户输入,并单独显示姓.名和全名,执行效果如下所示: Input your surname:ZHANG Input your firstnam ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- 流畅的python学习笔记:第二章
第二章开始介绍了列表这种数据结构,这个在python是经常用到的结构 列表的推导,将一个字符串编程一个列表,有下面的2种方法.其中第二种方法更简洁.可读性也比第一种要好 str='abc' strin ...
- Python 3标准库课件第二章
整理第一章我又觉得烦,我就看第二章了,灰头土脸的,第二章一.如列表(list).元组(tuple).字典(dict).集合(set)二.2.1 enum:枚举类型 enum模块定义了一个提供迭代和比较 ...
- Java编程思想_笔记_第二章_一切都是对象
第二章对于知识只是点到,会在以后章节会详细展开. 笔记的侧重会偏向记录自己知识模糊的地方.比如 xxx 很重要很难很实用,但是已经熟练使用就没有记录,而 “使用对象.成员名称来使用成员变量”,较简单而 ...
- 《python for data analysis》第二章,美国1880-2010年出生人口姓名的数据分析
<利用python进行数据分析>第二章的姓名例子,代码.整个例子的所有代码集成到了一个文件中,导致有些对象名如year同时作为了列名与行名,会打印warning,可分不同的part依次运行 ...
随机推荐
- 【Git】原Git库拆分子目录作为新仓库,并保留log记录
一.需求描述: 现有一个git仓库,Team A和Team B的人操作同一仓库的不同目录,Team A的dev希望Team B的dev没有权限review属于Team A的代码目录,故现需要先将这个g ...
- GIS基础软件及操作(六)
原文 GIS基础软件及操作(六) 练习六.空间分析的应用 1.加深对缓冲区分析基本原理.方法的认识:2.熟练掌握距离制图创建缓冲区技术方法.3.掌握利用缓冲区分析方法解决地学空间分析问题的能力. 1. ...
- Qt 跨UI线程的数据交换和信号-槽调用实现方案汇总
一.目录 转载1: http://my.oschina.NET/fanhuazi/blog/737224?ref=myread 点击打开链接 转载2: http://www.qtcn.org/bbs/ ...
- 指针与 const --- 指针常量与常量指针
注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...
- c#透明panel
先看下效果 纯透明的pane,然后设置一个半透明的图片,可以看出来显示了父控件的button 看代码 public partial class PanelEx : Panel { protected ...
- pytorch实现yolov3(1) yolov3基本原理
理解一个算法最好的就是实现它,对深度学习也一样,准备跟着https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-p ...
- AcWing 164. 可达性统计
给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...
- 点菜网---Java开源生鲜电商平台-技术选型(源码可下载)
点菜网---Java开源生鲜电商平台-技术选型(源码可下载) 1.内容简介 点菜网目前选用的是最流行的微服务架构模式,采用前后端分离的开发模式,具备高可用,高负载,支持千万级别的数据量的请求. 2. ...
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'wher id = 41' at line 1
where 没有打完整
- CRISP-DM--数据挖掘标准流程
CRISP-DM--数据挖掘标准流程 在1996年的时候,SPSS,戴姆勒-克莱斯勒和NCR公司发起共同成立了一个兴趣小组,目的是为了建立数据挖掘方法和过程的标准.并在1999年正式提炼出了CRISP ...