条件结构:

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('1') 
    print(x,'2')

>>>num()
1
682



 

关键字参数

  调用函数时可以直接写上参数的标识符来给参数赋值;

  关键字参数是让使用者调用参数名来区分参数;



def num(x,y):
    if y:
        print(y,'1') 
    print(x,'2')

>>>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='')