python小题目

本篇博客介绍了一系列Python编程题目,涵盖函数应用、列表处理、数学运算、字符串排序以及性能测试等方面。通过解决这些题目,可以提升对Python语言的理解和运用能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 利用add(x,y,f)函数,计算:
    √25+√9
import math
def add(x, y, f):
    return f(x) + f(y)
print add(25, 9, math.sqrt)

2.假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:

输入:[‘adam’, ‘LISA’, ‘barT’]
输出:[‘Adam’, ‘Lisa’, ‘Bart’]

分析:
format_name(s)函数接收一个字符串,并且要返回格式化后的字符串,利用map()函数,就可以输出新的list。

参考代码:

def format_name(s):
    return s[0].upper() + s[1:].lower()
print map(format_name, ['adam', 'LISA', 'barT'])

3.Python内置了求和函数sum(),但没有求积的函数,请利用recude()来求积:

输入:[2, 4, 5, 7, 12]
输出:2*4*5*7*12的结果

分析:
reduce()接收的函数f需要两个参数,并返回一个结果,以便继续进行下一轮计算。

参考代码:

def prod(x, y):
    return x * y
print reduce(prod, [2, 4, 5, 7, 12])

4.请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

分析:
filter() 接收的函数必须判断出一个数的平方根是否是整数,而 math.sqrt()返回结果是浮点数。

参考代码:

import math
def is_sqr(x):
    r = int(math.sqrt(x))
    return r*r==x
print filter(is_sqr, range(1, 101))

5.对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。

输入:[‘bob’, ‘about’, ‘Zoo’, ‘Credit’]
输出:[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]

分析:
对于比较函数cmp_ignore_case(s1, s2),要忽略大小写比较,就是先把两个字符串都变成大写(或者都变成小写),再比较。

参考代码:

def cmp_ignore_case(s1, s2):
    u1 = s1.upper()
    u2 = s2.upper()
    if u1 < u2:
        return -1
    if u1 > u2:
        return 1
    return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)

6.请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。

分析:
先定义能计算乘积的函数,再将此函数返回。

参考代码:

def calc_prod(lst):
    def lazy_prod():
        def f(x, y):
            return x * y
        return reduce(f, lst, 1)
    return lazy_prod
f = calc_prod([1, 2, 3, 4])
print f()

7.返回闭包不能引用循环变量,请改写count()函数,让它正确返回能计算1x1、2x2、3x3的函数。

分析:
考察下面的函数 f:

def f(j):
def g():
return j*j
return g
它可以正确地返回一个闭包g,g所引用的变量j不是循环变量,因此将正常执行。

在count函数的循环内部,如果借助f函数,就可以避免引用循环变量i。

参考代码:

def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
                return j*j
            return g
        r = f(i)
        fs.append(r)
    return fs
f1, f2, f3 = count()
print f1(), f2(), f3()

8.利用匿名函数简化以下代码:

def is_not_empty(s):
return s and len(s.strip()) > 0
filter(is_not_empty, [‘test’, None, ”, ‘str’, ’ ‘, ‘END’])

分析:
定义匿名函数时,没有return关键字,且表达式的值就是函数返回值。

参考代码:

print filter(lambda s: s and len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])

9.请编写一个@performance,它可以打印出函数调用的时间。

分析:
计算函数调用的时间可以记录调用前后的当前时间戳,然后计算两个时间戳的差。

参考代码:

import time
def performance(f):
    def fn(*args, **kw):
        t1 = time.time()
        r = f(*args, **kw)
        t2 = time.time()
        print 'call %s() in %fs' % (f.__name__, (t2 - t1))
        return r
    return fn

@performance
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

10.上一节的@performance只能打印秒,请给 @performace 增加一个参数,允许传入’s’或’ms’:

@performance(‘ms’)
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))

分析:
要实现带参数的@performance,就需要实现:

my_func = performance(‘ms’)(my_func)

需要3层嵌套的decorator来实现。

参考代码:

import time
def performance(unit):
def perf_decorator(f):
def wrapper(*args, **kw):
t1 = time.time()
r = f(*args, **kw)
t2 = time.time()
t = (t2 - t1) * 1000 if unit==’ms’ else (t2 - t1)
print ‘call %s() in %f %s’ % (f.name, t, unit)
return r
return wrapper
return perf_decorator

@performance(‘ms’)
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

11.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值