python3 程序设计 第6章课后题答案

目录

一.选择题

二.简答题

(1)什么是函数的嵌套定义?请举例说明。

(2)函数的可变参数有哪几种?各有什么特点?

(3)函数传递时,用基本数据类型和组合数据类型作参数,有什么区别?请举例说明。

(4)在内置函数中,列出5种常用的数学运算函数和字符运算函数。

(5)global语句的功能是什么?

(6)什么是默认参数?

3.阅读程序

(1)以下结果的运行结果是什么?

(2)以下结果的运行结果是什么?

(3)下面的程序用于模拟python内置函数sorted()的功能。在函数sorting(ls)中,ls是一个包含若干数值的列表,函数的返回值为排序后的列表,但实参ls不发生变化。完善程序,在[代码1]和[代码2]处补充合适的内容。

4.编程题

(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种常用的数学运算函数和字符运算函数。

数学运算函数:

  1. abs(x):返回x的绝对值。

  2. round(x,[n]):将x四舍五入到指定的小鼠位数n,默认为0。

  3. max(iterable,[key]):返回可迭代对象中的最大值,或者多个参数中的最大值

  4. min(iterable,[key]):返回可迭代对象中的最小值,或者多个参数中的最小值

  5. sum(iterable,[key]):返回可迭代对象元素中的所有元素的和,可指定初始值为start

字符运算函数:

  1. len(s):返回字符串s的长度(字符数或元素数)

  2. str(x):将对象x转换为字符串表示形式

  3. chr(i):返回Unicode码位i对应的字符

  4. ord(c):返回字符c对应的unicode码位

  5. 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)次,这不是我们想要的。
  • 39
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值