python 核心编程 11章函数 练习

#encoding=utf-8
# 11-3 函数。在这个练习中,我们将实现 max()和 min()内建函数。
# (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数。他们应该可以
# 用任意的 python 对象运作。举例来说,max2(4,8)和 min2(4,8)会各自每次返回 8 和 4。
# (b) 创建使用了在 a 部分中的解来重构 max()和 min()的新函数 my_max()和 my_min().这些函
# 数分别返回非空队列中一个最大和最小值。它们也能带一个参数集合作为输入。用数字和字符串来
# 测试你的解。
def max2(a,b):
if a > b:
return a
else:
return b
def min2(a,b):
if a > b:
return b
else:
return a
print max2(4,8)
print min2(4,8)
#返回队列的最大最小值
aList = [1,2,3,4,5,6,5,4,3,2]
def mymax(list):
for i in range(len(aList)):
if i == 0:
max = aList[i]
max = max2(max,aList[i])
return max
def mymin(list):
for i in range(len(aList)):
if i == 0:
min = aList[i]
min = min2(min,aList[i])
return min
print mymax(aList)
print mymin(aList)

#enumerate参数为可遍历的变量,如 字符串,列表等; 返回值为enumerate类
for i,j in enumerate(aList):
print i,j

print ‘11-6‘
# 11–6. 变长参数。下一个称为 printf()的函数。有一个值参数,格式字符串。剩下的就是根
# 据格式化字符串上的值,要显示在标准输出上的可变参数,格式化字符串中的值允许特别的字符串
# 格式操作指示符,如%d, %f, etc。提示:解是很琐碎的----无需实现字符串操作符功能性,但你需
# 要显示用字符串格式化操作(%)
#变长参数有默认参数,*元组实现的非关键字默认参数,**字典实现的关键字默认参数
def printf(arg ,*nkw):
for eachNum in nkw:
print arg % eachNum,
printf(‘%d‘,2,3.4,5)
printf(‘%f‘,2,3.4,5)

#非关键字可变参数 元组 *
def tuple(arg1,arg2=‘B‘,*theRest):
print ‘formal arg1:‘,arg1
print ‘formal arg2:‘,arg2
for eacharg in theRest:
print ‘another arg:‘,eacharg
tuple(‘abc‘)
tuple(23,4)
tuple(23,‘abc‘,‘xyz‘,456)

# 11–7. 用 map() 进 行 函 数 式 编 程 。 给 定 一 对 同 一 大 小 的 列 表 , 如 [1 , 2 , 3] 和
# [‘abc‘,‘def‘,‘ghi‘,....],将两个标归并为一个由每个列表元素组成的元组的单一的表,以使我
# 们的结果看起来像这样:{[(1, ‘abc‘), (2, ‘def‘), (3, ‘ghi‘), ...}.(虽然这问题在本质上和
# 第六章的一个问题相似,那时两个解没有直接的联系)然后创建用 zip 内建函数创建另一个解。
#map(func,参数) 返回全部参数的映射值
print ‘11-7‘
aList1 = [1,2,3,4,5]
aList2 = [‘abc‘,‘def‘,‘ghi‘,‘jkl‘,‘mno‘]
print map(None,aList1,aList2)

# 11–8. 用 filer()进行函数式编程.使用练习 5-4 你给出的代码来决定闰年。更新你的代码一
# 边他成为一个函数如果你还没有那么做的话。然后写一段代码来给出一个年份的列表并返回一个只
# 有闰年的列表。然后将它转化为用列表解析。
#filter(func,参数)返回为1的参数,筛选
def is_runyear(year):
if (year%4 == 0 and year%100 != 0) or (year%400 == 0 ):
return 1
else:
return 0
aList = [1996,2000,2001,2002,2003,2004,1900]
print filter(is_runyear,aList)
print [n for n in aList if is_runyear(n)]

# 11–9. 用 reduce()进行函数式编程。复习 11.7.2 部分,阐述如何用 reduce()数字集合的累
# 加的代码。修改它,创建一个叫 average()的函数来计算每个数字集合的简单的平均值。
aList = [1,3,5,7,9]
def average(list):
sum = reduce((lambda x,y: x+y), aList)
return sum / len(aList)
print average(aList)

# 11–11.用 map()进行函数式编程。写一个使用文件名以及通过除去每行中所有排头和最尾的空
# 白来“清洁“文件。在原始文件中读取然后写入一个新的文件,创建一个新的或者覆盖掉已存在的。
# 给你的用户一个选择来决定执行哪一个。将你的解转换成使用列表解析。
#每一行输入保存到1.txt,读取1.txt处理文件,
#每行输入保存到文件1。txt

‘‘‘----------迭代读取文件---------------‘‘‘
f = open(‘2.txt‘,‘r‘)
lines = f.readlines()

def func(s):
s.split()
for eachLine in lines:
print eachLine,len(eachLine)
print len(eachLine.split())
print map(func,eachLine)
str1 = ‘12345‘
str2 = ‘efghi‘
print map(None,str1)

def chuli(line):
return line.strip(‘ /n‘)

filename=‘2.txt‘
f=open(filename,‘r‘)
lines=f.readlines()
f.close()
choosen=0
while not choosen:
file_choose=raw_input(‘‘‘which file will you save? choose:
(N)ew file
(O)ld file
‘‘‘)
choose=file_choose.strip()[0].lower()
if choose not in ‘no‘:
print ‘choose invalid‘
elif choose==‘n‘:
file=raw_input(‘enter your new file name:‘)
choosen=1
else:
file=filename
choosen=1
f=open(file,‘w‘)
for line in map(chuli,lines):
f.write(‘%s/n‘%line)
f.close()

# ‘‘‘--------------------输出到文件-------------‘‘‘
# filename = raw_input(‘enter file name:‘)
# fobj = open(filename,‘w‘)
# #会覆盖原文件
# for eachLine in lines:
# print eachLine,
# fobj.write(‘%s%s‘ % (line1,os.linesep))

# 11–13.使用 reduce()进行函数式编程以及递归。在第 8 张中,我们看到 N 的阶乘或者 N!作为
# 从 1 到 N 所有数字的乘积。
# (a) 用一分钟写一个带 x,y 并返回他们乘积的名为 mult(x,y)的简单小巧的函数。
# (b)用你在 a 中创建 mult()函数以及 reduce 来计算阶乘。
# (c)彻底抛弃掉 mult()的使用,用 lamda 表达式替代。
# (d)在这章中,我们描绘了一个递归解决方案来找到 N!用你在上面问题中完成的 timeit()函数,
# 并给三个版本阶乘函数计时(迭代的,reduce()以及递归
def mult(x,y):
return x*y
#q求5!
print reduce(mult,range(1,6))
print reduce(lambda x,y:x*y,range(1,6))

时间: 2024-10-18 11:06:21

python 核心编程 11章函数 练习的相关文章

Python核心编程(第九章)--文件和输入输出

文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering=-1) filename 是包含要打开的文件名字的字符串(可以是相对路径或绝对路径) access_mode也是一个字符串,通常为'r','w','a'为读取,写入,和追加,使用'r'模式打开的文件必须是已存在的.'w'模式打开的文件若存在先清空,再重建 工厂函数file(): 与open()一样,

【6】python核心编程 第九章-文件和输入输出

1.文件对象的内建方法列表 1 文件对象的方法 操作 2 file.close() 关闭文件 3 file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值) 4 file.flush() 刷新文件的内部缓冲区 5 file.isatty() 判断 file 是否是一个类 tty 设备 6 file.nexta() 返回文件的下一行(类似于file.readline() ), 或在没有其它行时 7 引发 StopIteration 异常 8 file.read

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo

Python核心编程(第二版) 第五章习题答案

5-1.整型.讲讲Python普通整型和长整型的区别. 答:Python 的标准整数类型是最通用的数字类型.在大多数 32 位机器上,标准整数类型的取值范围是-2**31到 2**31-1,也就是-2,147,483,648 到 2,147,483,647.如果在 64 位机器上使用 64 位编译器编译 Python,那么在这个系统上的整数将是 64 位. Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关. 5-2.操作符.(a)写一个函数,计算并返回两个数的乘积.

Python核心编程第五章习题

Python核心编程-第五章-习题 5.1  整形,讲讲Python普通整形与长整形的区别? Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,3.0版本已经统一称为为整

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

python核心编程--第六章 6.22 练习

6.22 练习 初学python,如果代码有问题,欢迎指正. #!/usr/bin/python # -*- coding: utf-8 -*- #6–1. 字符串.string 模块中是否有一种字符串方法或者函数 #可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? import string ss = "I'm chinese." substr = 'chinese' index = ss.find(substr) if index == -1: print("No

《Python核心编程》第二版第五章答案

5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,这两种整形类型正在逐渐统一为 一种. 5-2.操作符.(a)写一

《Python核心编程》 第七章 映射和集合类型 - 习题

课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {'1' :' python' } dict2 = {'2' :"hello" } dict1.update(dict2) dictAll = dict1 print dictAll Result: {'1': ' python', '2': 'hello'} 7–2. 字典的键.我们知道字典的值可以是任意的 Python 对象,那字典的键又如何呢?请试 着将除数字和字符串以外的其他不同类型