(一) if 

if a1==a2:
print('ok')

if:  else:

if: elif: ... else:  注意缩进

猜数字游戏

from random import randint
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')

(二) for 循环

上述只能猜一次数字, 如何猜多次? for 循环

range(start, end, step=1),  list(range(3,11,2))=[3,5,7,9]

range(start, end), 默认step=1,  list(range(3,5))=[3,4]

range(end), 默认start=0, step=1,  list(range(4))=[0,1,2,3].

1.while 语句(循环次数不确定)

s=0
j=1
while j<10:
s=s+j
j=j+1
print(s) #

2. for (循环次数确定, 遍历数据集中的成员)

f='python'
for x in f:
print(x)
# 输出 p yt h o n

用range

for i in range(5):
print(i, end=',')
#0,1,2,3,4,

修改之前猜数字游戏设定猜3次

from random import randint
x=randint(0,300)
for cnt in range(3):
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创建列表, 生产器:

# 创建列表
[i for i in range(10)]
Out[11]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[i+1 for i in range(10) if i%2==0]
Out[12]: [1, 3, 5, 7, 9]
# 生成器
(i for i in range(10))
Out[13]: <generator object <genexpr> at 0x000001D6BA07FF48>

break的运用

加和

s=0
j=1
while True:
s=s+j
j=j+1
if s>20:
break
print('j={},sum={}'.format(j,s)) # j=7,sum=21

2-100素数寻找

from math import sqrt
j=2
while j<=100:
i=2
k=int(sqrt(j))
while i<=k:
if j%i==0 : break
i=i+1
if i>k:
print(j,end=' ')
j=j+1
# 用for
for i in range(2,10):
flag=1
k=int(sqrt(i))
for j in range(2,k+1): # i=2, k=1,j会有问题
if i%j==0:
flag=0
break
if flag: # 不能j>k,跳出循环j不会+1, 比如i=7,j=2 break,跳出后仍是j=2,2>2不成立则不输出7,error, 因此引入flag
print(i,end=',')
i=i+1

continue 停止这一轮循环

猜数字游戏改进, 由用户自定义多少次停止

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()
print(go)
else:
print('goodbye!')

注意: else与while搭配, 这是python的特点, 如果循环从break终止, 跳出循环, 正常结束就执行else,

当你不行继续, 输入no, 也是会有 goodbye!

else 也可以与for 搭配, 用法与while一样.

问题: 下面代码输出什么?

for i in range(1, 10, 2):
if i % 5 == 0:
print("Bingo!")
break
else:
print(i)

ans: bingo!

(三) 函数

def fun_name(x):
'apply operation + to argument'
return(x+x)
print(fun_name(2)) #4

判别素数的函数

from math import sqrt
def isprime(x):
if x==1:
return False
k=int(sqrt(x))
for i in range(2,k+1):
if x%i==0:
return False
return True
for i in range(2,20):
if isprime(i):
print(i,end=' ')

函数的默认参数(函数定义时使用)

def fun(x=True): # 默认参数值为true
if x:
print('x is a correct word')
print('ok')
fun() # 没有参数则默认为True ,输出x is a correct word ok
fun(False) # 有参数则按照这个参数来, 最后只输出ok

注意: 默认参数需要放在参数列表的最后!! , 否则会有歧义, 例如

def f(x,y=True):
if y:
print(x,'and y both correct')
print(x,'is ok')
f(68) # 默认传给x
#68 and y both correct
#68 is ok
f(68,False) # 只输出68 is ok def f(y=True, x):
if y:
print(x,'and y both correct')
print(x, 'is ok')
f(False) # 报错! , False应该给x 还是y?

关键字参数: 当函数有很多输入参数时, 用关键字参数调用函数可以避免顺序搞错

def f(x,y):
if y:
print(x,'and y both correct')
print(x,'is ok')
f(y=2, x=1)

但是一旦用关键字参数, 后面都要用, 不可以f(y=1,2) !

多个函数套用

def add1(x):
return(x+x)
def add2(x):
return(x+10)
print(add2(add1(3))) #

传递函数

def add1(x):
return(x+x)
def add2(f,x):
return(f(x))
print(add2(add1,10)) #

特殊的函数 lambda  匿名函数

r= lambda x :x**2
print(r(5)) #
r= lambda x,y:x*2+y
print(r(5,2)) #

递归函数: 斐波那契数列 0,1,1,2,3,5,8,13...

def fib(n):
if n==0 or n==1:
return n
else:
return fib(n-1)+fib(n-2)
print(fib(10)) # 55

递归的效率比较低, 不及循环.

实例1: 汉诺塔, 三个盘子a, b, c, a上有n 个盘子, 想要移动到c

n=1, 则直接从a 到c, n>1, 把n-1个盘子借助c移动到b, 接着a->c, 然后把b的n-1个盘子借助a移到c.

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)
print(hanoi('a','b','c',3))

得到移动过程

a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c

实例2: 阶乘

def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)
print(fact(5)) #

实例3: 字符串反转

def reverse(s):
if s=='':
return s
else:
return s[-1]+reverse(s[0:-1]) # 或者reverse(s[1:])+s[0]
str='abcd'
print(reverse(str)) # dcba

全局变量

def f(x):
global a
print(a)
a=5
print(a+x)
a=3
print(f(8)) #
print(a) #

少用全局变量

python的标准库函数

1.math库

查看math 库下面的函数

import math
math.pi,  math.e, math.degrees(3.14), math.radians(180)

from math import*
x=-2.3
print(ceil(x)) # -2
print(floor(x)) # -3
x=2.3
print(log(x)) # 以e为底 # 0.8329091229351039
print(sqrt(x)) # 1.51657508881031
print(exp(x)) # 9.974182454814718
print(log10(x)) # 0.36172783601759284
print(sin(x)) # 0.7457052121767203

.os 库

import os

os.getcwd()  # 获得当前工作目录
Out[33]: 'C:\\Users\\xuying_fall\\.spyder-py3' path='c:\\test'
os.chdir(path) # 修改当前目录
os.rename('test.txt','test1.txt') # 重命名
os.remove('test1.txt') # 删除文件

读取文件的操作会在后续再详细介绍.......

3. random 库  import  random

import random
random.randint(1,100)# 产生随机整数1-100之间
random.randrange(0,10,2) # 产生随机整数
random.random() # 随机浮点数, 包含0, 不包含1.0
random.uniform(5,10) # 产生5-10均匀分布随机浮点数,
random.sample(range(100),10) # 获取10个元素作为样本 [23, 28, 39, 82, 2, 87, 25, 36, 32, 88]
a=[1,2,3,4]
random.shuffle(a) # 将a 打乱顺序, 改变了a
print(a) # [2, 4, 3, 1]

其他

from random import*
seed(10)
print(random()) # 0.5714025946899135, [0,1]之间的小数
seed(10)
print(random()) # 0.5714025946899135 , #同一个seed下,产生的随机数是一样的

实例 monte_carlo 模拟pi 的近似值: 采用面积法进行,在[0,1]*[0,1]之间进行掷点, 计算到(0,0)之间的距离

from random import *
from math import *
tol=3000 # 总次数
cnt=0 # 用于计数
for i in range(1,tol): # 实际tol取不到
x,y=random(),random() # 可以一起赋值
d=sqrt(x**2+y**2)
if d<=1.0:
cnt+=1
pi=4*(cnt/tol)
print('pi is about %.2f'%pi) # pi is about 3.18

4.datetime日期处理

from datetime import date
print(date.today()) # 2018-11-24 from datetime import time
tm=time(23,20,15)
print(tm) # 23:20:15 from datetime import datetime
dt=datetime.now()
print(dt) # 2018-11-24 13:21:48.968220 # 格式转化, %a 本地简化的星期名称, %A本地完整的星期名称
print(dt.strftime('%a, %b %d %Y %H:%M ')) #
# Sat, Nov 24 2018 13 :43
print(dt.strftime('%A, %b %d %Y %H:%M '))
# Saturday, Nov 24 2018 13 :44
dt1=datetime(2018,6,6,23,29)
print(dt1) # 2018-06-06 23:29:00
ts=dt1.timestamp() # 把datetime转为全球统一的时间戳,
print(ts)# 1971-1-1,0时刻记作0, 当前时间为从该时刻开始的秒数,1528298940.0
print(datetime.fromtimestamp(ts)) # 把时间戳转为本地的时间,2018-06-06 23:29:00

(四) 程序的异常处理

除数为0的情况, 异常为终止程序的进行

try except 语句

try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
except ValueError: # ValueError异常类的名字
print('please input a digit!')
# 没有异常就会忽略except 的语句
except ZeroDivisionError as err: #err存放错误原因
print('the second number cannot be zero')
print(err) # 多个except 语句捕捉多个异常, 也可以写在一起
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
# 一个except 捕捉多个异常
except (ValueError,ZeroDivisionError) #err存放错误原因
print('invalid input!')

如果想捕捉所有的异常怎么办?

try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
# 一个except 捕捉多个异常
except:
print('something went wrong!')

enter the first number:a

something went wrong!

但是不知道出错原因, 怎么办?  用as 语句, 也可以添加else , 在一切正常的时候执行

try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
# 一个except 捕捉多个异常
except Exception as err: #err存放错误原因
print('something went wrong!')
print(err)
else:
print('All right')

上述如果有异常就结束程序, 如何多次尝试直到正确为止?  增加while True

while True:
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
break
# 一个except 捕捉多个异常
except Exception as err: #err存放错误原因
print('something went wrong!')
print(err)
else:
print('All right')

try-except 除了跟着else 语句, 还可以跟着finally 语句, 无论是否异常都要执行!

while True:
try:
num1=int(input('enter the first number:'))
num2=int(input('enter the second number:'))
print(num1/num2)
break
# 一个except 捕捉多个异常
except Exception as err: #err存放错误原因
print('something went wrong!')
print(err)
finally:
print('this round is over')

打开关闭文件

try:
f=open('data.txt')
for line in f:
print(line,end=';')
except IOError:
print('cannot open the file')
finally:
f.close()

无论文件是否被正常打开, 最后都会关闭, 但是当文件打开出错时, f 会有问题, 因此f.close() 报错

如何解决?? with open('data.txt') as f:  就不会有问题了, 这种方式打开文件不需要最后加close

try:
with open('data.txt') as f:
for line in f:
print(line,end=';')
except IOError:
print('cannot open the file')

实例:  二次函数求根

import math
def main():
print('this programe is to find the real roots of equation\n')
try:
a,b,c=eval(input('please input three coefficients:'))
dd=math.sqrt(b**2-4*a*c)
r1=(-b+dd)/(2*a)
r2=(-b-dd)/(2*a)
print('the real roots are:',r1,r2)
except :
print('\n something went wrong, sorry')
finally:
print('\n maybe another try or quit') # 无论是是否出错都会执行的语句
main() # 调用函数

注意: 输入 1,2,3  注意: 输入格式要和代码中a,b,c 一致, 要用逗号!! , 这里就不能输入1 2 3

please input three coefficients:2,3,1

the real roots are: -0.5 -1.0  # 这里的输出没有逗号!!

maybe another try or quit

(五) 程序调试

在代码的前面空白处双击一下就可以设置断点, 调试可以实现运行到断点所在行

依次: 运行, 运行当前行

第五个: 运行到下一个断点处, 最后一个按钮表示停止调试

(六) 格式化输出%

print('%c'%98) # b
print('%d+%d=%d'%(1,2,1+2))
print('%5.3f'%12.34) # 12.340 保留三位小数
s=1001.23
print('the total sum is %.2f'%s) # the total sum is 1001.23

实例

result=1.09023
print('结果为:{}'.format(result))
print('{}'.format(result)) #结果为:1.09023
print('%.3f'%result) #浮点型保留三个小数, 1.090
print('%.0f'%result) #不保留小数, 1
print('%d'%result)#

(七)重要函数

排序, 最值, 列举...

x=[1,3,5,2]
print (max(x)) #
print(sorted(x)) # [1, 2, 3, 5] , x没有改变
print(list(enumerate(x))) # [(0, 1), (1, 3), (2, 5), (3, 2)]

map(f(x), [x1,x2])=[f(x1),f(x2)]

上述已经介绍过了lambda的强大, 还有一个filter函数也很厉害

print (filter(None,[0,1,2,False,True]))  #[1, 2, True]选出true项
# 得到的只是<filter object at 0x0000021870326940>
# 加一个list就可以输出了
print (list(filter(None,[0,1,2,False,True]))) #[1, 2, True]选出true项 print(list(filter(lambda x:x%2,range(10)))) #[1, 3, 5, 7, 9]选出奇数项, print(list(map(lambda x:x**2+1,range(4)))) # [1, 2, 5, 10] 集合映射逐一计算

Python 的精简

a=['   ds','dd ']
b=[i.strip() for i in a] #去空格, 精简的循环写法
print(b) # ['ds', 'dd']
print (list(map(str.strip,a))) #两者等价 ['ds', 'dd'] , str表示库 vec=[(1,2),(3,4)]
c=[ j for i in vec for j in i]
print (c) #每个元素取出来 [1, 2, 3, 4] print([(x,y)for x in range(2) for y in range(2)])
#得到[(0, 0), (0, 1), (1, 0), (1, 1)]

python(2): If/for/函数/try异常/调试/格式输出%的更多相关文章

  1. 翻译《Writing Idiomatic Python》(二):函数、异常

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  2. python中的生成器函数是如何工作的?

    以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...

  3. python使用traceback获取详细的异常信息

    原创来自:https://blog.csdn.net/mengtao0609/article/details/55049059 python使用traceback获取详细的异常信息 2017年02月1 ...

  4. python中常用的函数与库一

    1, collections.deque 在python里如果我们用列表作为队列使用也是可以的,只是当从队尾删除或者增加元素的时候是很快的,但是从队首删除或者增加元素则要慢得多,这是因为在队首进行操作 ...

  5. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  6. Python 中的isinstance函数

    解释: Python 中的isinstance函数,isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo) 如果参数object是cla ...

  7. python入门(十一):异常

     1.异常概念: >>> a Traceback (most recent call last): File "<stdin>", line 1, i ...

  8. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  9. python 基础5 初级函数

    函数最重要的目的是方便我们重复使用相同的一段程序.将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. def my_len(): def 关键字 ...

随机推荐

  1. bae64编码

    data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJb ...

  2. C - Alphabetic Removals

    题目链接: You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove e ...

  3. python基础类知识~pymysql封装类

    一简介:咱们来介绍下 DBA常用的几个类 二 具体代码 #!/usr/bin/python3import pymysqlimport sysclass DBHelper: def __init__(s ...

  4. Thymeleaf--:fragment

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" ...

  5. ARM核心板_迅为imx6工控核心板_核心板中的小新潮

    ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...

  6. iTOP-4418开发板Ubuntu系统烧写方法分享

    开发平台:迅为iTOP-4418开发板    系统:Ubuntu   1. TF卡读写速度测试 烧写 Ubuntu 对于 TF 卡的要求比较高,很多老旧的卡都无法烧写 Ubuntu,下面提供一种 相对 ...

  7. Css - 浮动布局

    Css - 浮动布局 浮动布局 float 取值:left | right | none 利用float属性可设置元素的浮动,虽然浮动主要是应用于块元素,但行内元素其实也可以浮动,但行内元素本来就是一 ...

  8. ASP.NET MVC - 发布web应用程序、部署到IIS

    发布项目 右击项目 - 发布 选择IIS - 点击发布 发布方法 - 文件系统,目标位置 - 选择与项目所在目录不同的目录(也即,指定一个发布生成文件的目录),文件发布选项 - 不选 - 点击发布 安 ...

  9. ajax跨域请求のJSONP

    简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级 ...

  10. [转] 一文弄懂神经网络中的反向传播法——BackPropagation

    在看CNN和RNN的相关算法TF实现,总感觉有些细枝末节理解不到位,浮在表面.那么就一点点扣细节吧. 这个作者讲方向传播也是没谁了,666- 原文地址:https://www.cnblogs.com/ ...