目录
(3)函数传递时,用基本数据类型和组合数据类型作参数,有什么区别?请举例说明。
(4)在内置函数中,列出5种常用的数学运算函数和字符运算函数。
(1)编写函数isodd(x),如果x不是整数,给出提示后退出程序;如果x是奇数,返回True;如果x为偶数,返回Flase 。
(2)编写函数change(str1),其功能是对参数str1进行大小写转换,将大写字母转换成小写字母;将小写字母转换成大写字母;非英文字符不转换。
(3)编写并测试函数gcd(m,n)和lcm(m,n),其功能是求两个整数m,n的最大公约数和最小公倍数。
(4)编写并测试函数reverse(x),输入一个整数,并将各位数字反转后输出。
(5)用递归方法反转一个字符串,如“abcde”,反转为“edcba”。
(6)编写程序求1^2-2^2+3^2-4^2+…………+97^2-98^2+99^2。
一.选择题
1.B 2.D 3.D 4.B 5.C 6.B 7.C 8.D
9.D
可变参数一般要在传统参数之后,传统参数在指定时必须明确指定名称,而可变参数是用于处理不定数量的参数,再说一下默认参数,没有传入值时,参数的值就默认了。比如def c(a=2),假如没有传入值时,a就等于2
10.A
11.C
从用户输入的字符串中删除所有非数字字符,然后打印结果,如果w不是列表,而是字符串,你可以使用类似方法遍历
12.A
你用global在函数内声明 z 为全局变量,你可以在函数内改变全局变量z的值,通过代码,我们可以看出z的值被改为了36,先打印z原先的值,最后打印调用loc_glo()后的值,所以最后打印出来就是10 36
二.简答题
(1)什么是函数的嵌套定义?请举例说明。
在函数内部定义的函数,但内嵌的函数只能在该函数内部使用。
def sum(n): def fact(a): 函数体 函数体 #需要注意的是内嵌函数只能在该函数内部使用
(2)函数的可变参数有哪几种?各有什么特点?
1.不定长位置参数:通常情况下,在参数名前加上星号*,可以让函数接受任意数量的位置参数,这些参数将被封装为一个元组。 def func(*args): pass func(1,2,3) #args=(1,2,3) 2.不定长关键字参数:通常在参数名前加上双星号**,可以让函数接受任意数量的关键字参数,这些参数将被封装为一个字典。 def func(**kwargs): pass func(a=1,b=2,c=3) #kwargs={'a':1,'b':2,'c':3}
(3)函数传递时,用基本数据类型和组合数据类型作参数,有什么区别?请举例说明。
基本数据类型是指不能再细分的数据类型,通常包括整数(int)、浮点数(float)、布尔值
(bool)
、字符串(str)
等。这些数据类型是不可变的,也就是说它们的值一旦创建就不能被修改,任何对它们的操作都会返回一个新的值。
#example x=5 y=x #将x的值赋给y x=10 #修改x的值 print(y) #输出结果为5,因为整数是不可改变的,y的值不受x修改的影响组合数据类型是指可以包含多个元素的数据类型,通常包括列表(list)、元组(tuple)、集合(set)、字典(dict)等。
这些数据类型是可变的,也就是说它们的值可以被修改,可以添加、删除或修改其中的元素。
#列表是一个组合数据类型 list1=[1,2,3] list2=list1 list1.append(4) print(list2) #输出结果为[1,2,3,4],因为列表是可变的,list2的值受list1影响
(4)在内置函数中,列出5种常用的数学运算函数和字符运算函数。
数学运算函数:
abs(x):返回x的绝对值。
round(x,[n]):将x四舍五入到指定的小鼠位数n,默认为0。
max(iterable,[key])
:返回可迭代对象中的最大值,或者多个参数中的最大值
min(iterable,[key])
:返回可迭代对象中的最小值,或者多个参数中的最小值
sum(iterable,[key])
:返回可迭代对象元素中的所有元素的和,可指定初始值为start字符运算函数:
len(s):
返回字符串s的长度(字符数或元素数)
str(x):
将对象x转换为字符串表示形式
chr(i):
返回Unicode码位i对应的字符
ord(c):
返回字符c对应的unicode
码位format(value,format_spec):根据指定的格式化字符串format_spec,格式化值value,并返回结果字符串
(5)global语句的功能是什么?
用于在内部函数声明全局变量
(6)什么是默认参数?
默认参数是在定义函数时给参数指定的一些默认值。当函数被调用时,如果没有给定这些参数的值,那么就会使用默认参数值。默认参数使得函数调用时更加灵活,可以省略一些常用的参数,同时也可以在需要时指定不同的值。
3.阅读程序
(1)以下结果的运行结果是什么?
arr1=[12,34,56] arr2=[1,2,3,4] def disp(p): print(p) arr1=arr2 arr1.append([5,6]) disp(arr2) disp(arr1) 运行结果: [1, 2, 3, 4, [5, 6]] [1, 2, 3, 4, [5, 6]] #arr1=arr2,实际上是让arr1的地址等于arr2的地址,改变arr1就是改变arr2
(2)以下结果的运行结果是什么?
def func(a,b): c=a**2+b b=a return c a=10 b=100 c=func(a,b)+a print(a,b,c) 运行结果: 10 100 210
(3)下面的程序用于模拟python内置函数sorted()的功能。在函数sorting(ls)中,ls是一个包含若干数值的列表,函数的返回值为排序后的列表,但实参ls不发生变化。完善程序,在[代码1]和[代码2]处补充合适的内容。
def sorting(ls): m=ls.copy() r=[] for i in ls: t=min(m) r.append(t) m.remove(min(m)) return r #主程序 ls=[11,2,34,41,25] print("排序后的结果:",sorting(1s)) print("原列表不变:",ls) #找出一个最小的,将原来列表中最小的删除,重复就可以排序
4.编程题
(1)编写函数isodd(x)
,如果x不是整数,给出提示后退出程序;如果x是奇数,返回True;如果x为偶数,返回Flase
。
def isodd(x): if isinstance(x,int): if x%2==0: print("Flase") else: print("Ture") else: print("不是整数") a=15 isodd(a) #调用isodd(x)函数 #isinstance可以用于检查对象是不是指定类型,比如int,float,用法isinstance(x,float) or isinstance(x,int),如果你想严格的判断一个数是不是整数,可以用is_integer()方法:x.is_integer()来判断
(2)编写函数change(str1)
,其功能是对参数str1
进行大小写转换,将大写字母转换成小写字母;将小写字母转换成大写字母;非英文字符不转换。
#有两种方法判断str1是不是非英文字符 ''' 1. char='a' if char.isalpha(): print("英文字符") else: print("不是英文字符") 2. char='a' if ord('A')<=ord(char)<=ord('Z') or ord('a')<=ord(char)<=ord('z'): print("英文字符") else: print("不是英文字符") ''' def change(str1): if str1.isalpha(): if ord('A')<=ord(str1)<=ord('Z'): str1=str1.lower() print(f"str1:{str1}") return str1 if ord('a')<=ord(str1)<=ord('z'): str1=str1.upper() print(f"str1:{str1}") return str1 a=input("请输入英文字母(一个):") change(a)
(3)编写并测试函数gcd(m,n)
和lcm(m,n)
,其功能是求两个整数m,n的最大公约数和最小公倍数。
def gcd(m, n): while n != 0: m, n = n, m % n return m def lcm(m,n): if m==0 or n==0: return 0 min_num=(m*n)//gcd(m,n) return min_num m=int(input("please enter an integer number:")) n=int(input("please enter an integer number:")) max_num=gcd(m,n) print(f"max_num:{max_num}") min_num=lcm(m,n) print(f"min_num:{min_num}")
(4)编写并测试函数reverse(x),输入一个整数,并将各位数字反转后输出。
def reverse(x): if x<0: return int(str(x)[0]+str(x)[:0:-1]) else: return int(str(x)[::-1]) num=15365 reverse_num=reverse(num) print(f"reverse_num:{reverse_num}")
(5)用递归方法反转一个字符串,如“abcde
”,反转为“edcba
”。
def func(x): return str(x)[::-1] word=input("please enter word:") opposite_word=func(word) print(f"opposite_word:{opposite_word}") #这个不是用的递归方法 def opposite_word(s): if len(s)<=1: return s else: return s[-1]+opposite_word(s[:-1]) word=input("please enter word:") opposite_word1=opposite_word(word) print(f"opposite_word1:{opposite_word1}") #这个是用递归的方法
(6)编写程序求1^2-2^2+3^2-4^2+…………+97^2-98^2+99^2。
def func(x): if x==1: return 1 else: return ((-1)**(x+1))*(x**2)+func(x-1) number=int(input("please enter number:")) answer_solution=func(number) print("answer_solution:{}".format(answer_solution)) #这个是我用递归方法算的,可能考虑不周到,如果有更好的建议可以给我说。 #我在编写程序的时候也犯了一些错误return [(-1)**(x+1)]*(x**2)+func(x-1),这个是错误的,[(-1)**(x+1)]*(x**2)会生成一个列表将[(-1)**(x+1)]重复(x**2)次,这不是我们想要的。