python基础升级第三节


练习一:定义一个函数,接收任意3个数字的输入,并按顺序从小到大输出

num1 = int(input('输入第一个数:'))
num2 = int(input('输入第二个数:'))
num3 = int(input('输入第三个数:'))
l1=[]

def mysort(num1,num2,num3):

l1.append(num1)
l1.append(num2)
l1.append(num3)
l1.sort()
mysort(num1,num2,num3)
print(l1)

练习二:要求创建一个函数,它可以接收,位置参数,不定长位置参数,不定长关键词参数,并按要求输出。
 输入班级名,班级特色(如’勤奋’,’颜值高’ )等等不同特色,班级不同同学的姓名与年龄。
 要求输出,班级名,班级特色,班级成员,班级成员的平均年龄。

def myclass(className,*args,**kwargs):
sum1 = 0
print('\n班级名:',className)


print('\n班级特色:')
for item in args:
print(item)
print('\n同学姓名:')

for key,value in kwargs.items():
print(key)
sum1 =value
print('\n同学平均年龄:')
print (sum1/len(kwargs))
myclass('三年一班','团结','向上',张三=15,李四=16,王五=17,王麻子=16)

练习三:使用reduce函数实现找出一组数字列表中的最大值
l1 = [11,22,5,6,33,56,88,32,65]
from functools import reduce
reduce(lambda a,b:max(a,b),l1)

练习四:求1000以内能同时被3和7整除的数有哪些。要求使用map与filter函数
方法一:使用filter
l1=list(range(1,1001))
def foo(x):
return x%3==0 and x%7==0
list(filter(foo, l1))

方法二:使用map

def myMap(x):
if x%3==0 and x%7==0 :
return x
else:
return 0
l1 = list(map(myMap,range(1,1001)))
l2=[]
for i in range(len(l1)):
if l1[i] != 0 :
l2.append(l1[i])
print(l2)

练习四(2):创建一个三层嵌套的闭包函数

def foo1(g_l1):
print('foo1_max', max(g_l1))
def foo2():
print('foo2_min', min(g_l1))
def foo3():
print('foo3_sum', sum(g_l1))
return sum(g_l1)
return foo3()
return foo2()

g_l1=[88,33,55,66,99,22,11,44,77]
foo1(g_l1)

练习五(一):请以round函数,定义一个偏函数roundN,调用为输入一个数字N,返回圆周率后N位的数字

import functools
import math
roundN=functools.partial(round,math.pi)
roundN(5)

练习五(二):请以sorted函数,定义一个偏函数sortedDESC,结果为输入一个序列,返回为按降序排列后序列。

import functools
sortedDESC=functools.partial(sorted,reverse=True)
l1 = sortedDESC([88,99,66,77,55,44,33])
print(l1)

练习六:要求使用map与filter函数,输出一个输入字符串里每个字符出现的次数

方法一
str1 = input('输入字符串')
dict(map(lambda x:(x,str1.count(x)),str1))

方法二
d={}
str1 = input('输入字符串')
def myDict1(str):
if str not in d.keys():
d[str]=1
else:
d[str]=d[str] 1
return True
list(filter(myDict1,str1))
print(d)

练习七:创建一个能够快递排序的递归函数

def myQuicksort(l, start, end):
if (end - start 1) <= 1:
pass
else:
midnum = l[(start end)//2] #index位于中间的元素 作为标准把列表分为左边小右边大两部分

left=start
mid=start
right=end
while mid <= right:
if l[mid]<midnum:
l[left], l[mid] = l[mid], l[left]
left =1
mid =1 #mid加1是因为对比的元素的index加1
elif l[mid]>midnum:
l[right], l[mid] = l[mid], l[right]
right -=1
else:
mid =1 #mid加1是因为对比的元素的index加1
myQuicksort(l, start, left - 1)
myQuicksort(l, right 1, end)

l1=[33,22,11,99,66,44,55,88,77]
myQuicksort(l1, 0, len(l1)-1 )
print(l1)

参考网上的方法二:
def quickSort(list, start, end):
if start>end:
return
i, j = start, end
flag = list[start]
while True:
#先从右往左找
while j>i and list[j] >= flag:
j = j - 1

#再从左往右找
while i< j and list[i] <= flag:
i += 1

if i < j:
list[i], list[j] = list[j], list[i]
elif i == j:
#当左右相等时第一次递归结束
list[start], list[i] = list[i], list[start]
break
quickSort(list,start, i-1)
quickSort(list, i+1, end)

list_test = [7, 4, 7, 2,20, 4,19, 10, 4, 9, 5, 8, 10]
print(list_test)
quickSort(list_test, 0, (len(list_test)-1))
print(list_test)

练习八:创建一个能打印一个字典中包含所有字典对象的递归函数
def printdic(di):
print(di)
for k in di:
if type(di[k]) == dict:
print('- - -'*16)
printdic(di[k])

dic = {
'北京':{
'东城': ["天坛", "东单", "王府井"],
'西城': ["西单", "军博", "复兴门"],
},
'上海': {
'杨浦': ['五角场','政通路','世界路']
},
'天津': ['天津港']
}
printdic(dic)

练习九:编写一个生成器,实现fib数列的效果
def fibgen(num):
a,b=0,1
for i in range(num):
yield a
a,b=b,a b
g1 = fibgen(10)
print(list(g1))

作业:创建一个能接收不定长位置参数(数字)函数,返回是所有参数的和。
 现要求在这个函数每次调用时都有进行屏幕打印(该函数被调用)。
 请在不改动这个函数内部及调用的前提下实现

def dec(func):
def inner(*args):
print('调用函数:',func.__name__)

print(func.__name__,'函数结果:',func())
print('调用时间:',datetime.datetime.now())
return func(*args)
return inner
@dec
def mySum(*args):
num=sum(args)

return num

mySum(1,10,100)
已邀请:

awutang

赞同来自:


练习七(创建一个能够快递排序的递归函数)的解法不是递归的吧

要回复问题请先登录注册

返回顶部