Python基础入门(夏敏捷等著)课后习题答案全解

目录不能有小于号

    • 正在更新中……@202212.18
    • 第一章习题
      • 1.1 Python语言有哪些特点和缺点?
      • 1.2 Python基本输入输出函数是什么?
      • 1.3 如何在IDLE中运行和调试Python程序?
      • 1.4 为什么要在程序中加入注释?怎么在程序中加入注释?
    • 第二章习题
      • 2.1 Python数据类型有哪些?分别什么用途?
      • 2.2 把下列数学表达式转换成等价的Python表达式。
      • 2.3 数学上 3小于x小于10 表示成正确的Python表达式为?
      • 2.4 计算下列表达式的值(可在上机时验证),设a=7,b=-2,c=4。
      • 2.5 求列表s=[9,7,8,3,2,1,55,6]中的元素个数,最大数,最小数?如何在列表s中添加一个元素10?如何从列表s中删除一个元素55?
      • 2.6 元组与列表主要区别?s=(9,7,8,3,2,1,55,6)能添加元素吗?
      • 2.7 已知有列表lst=[54,36,75,28,50],请完成以下操作?
      • 2.8 三个集合,python={…………},java={…………},C={…………},求:
    • 第三章习题
      • 3.1 输入一个整数n,判断其能否同时被5和7整除,如能则输出“xx能同时被5和7 整除”,否则输出“xx不能同时被5和7 整除”。要求“xx”为输入的具体数据。
      • 3.2 输入一个百分制的成绩,经判断后输出该成绩的对应等级。其中,90分以上为“A”,80~ 89分为“B”,70~ 79分为“C”,60~69分为“D”,60分以下为“E”。
      • 3.3 某百货公司为了促销,采用购物打折的办法。1000元以上者,按九五折优惠;2000元以上者,按九折优惠;3000元以上者,按八五折优惠;5000元以上者,按八折优惠。编写程序,输入购物款数,计算并输出优惠价。
      • 3.4 编写一个求整数n阶乘(n!)的程序。
      • 3.5利用while循环创建一个包含10个奇数的列表,然后计算该列表的和与平均值。
      • 3.6 编写程序,求1!+3!+5!+7!+9!。
      • 3.7 计算公式s的值,s =1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)
      • 3.8 枚举法:“百马百瓦问题”
      • 3.9 斐波那契函数问题
      • 3.10 找出1与100之间的全部“同构数”。
      • 3.11 猴子吃桃问题。
      • 3.12 输入一个字符串,然后依次显示该字符串的每个字符以及该字符的Ascii码。
      • 3.13 开发猜数字小游戏,计算机随机生成100以内的数字,玩家猜大或猜小都给出提示,直至猜中,同时统计猜测次数。
      • 3.14 枚举法:已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
    • 第四章·函数
      • 4.1 将华氏温度转换为摄氏温度
      • 4.2 编写一个函数判断一个数是否为素数,并通过调用该函数求出所有三位数的素数。
      • 4.3 编写一个函数,求满足以下条件的最大的n值:
      • 4.4 编写一个函数multi(),参数个数不限,返回所有参数的乘积。
      • 4.5 编写一个函数,功能是求两个正整数m和n的最小公倍数。
      • 4.6 求一元二次方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。要求从主函数输入a,b,c的值。
      • 4.7 编写一个函数,调用该函数能够打印一个由指定字符组成的 n 行金字塔。其中,指定打印的字符和行数 n分别由两个形参表示。
      • 4.8 编写一个判断完数的函数。完数是指一个数恰好等于它的因子之和,如 6=1+2+3,6就是完数。
      • 4.9 编写一个将十进制数转换为二进制数的函数。
      • 4.10 编写一个判断字符串是否是回文的函数。
      • 4.11 编写一个函数,实现统计字符串中单词的个数并返回。
      • 4.12 利用 map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。例如输入:['adam',LISA',barT'],输出:['Adam',Lisa','Bart]。
      • 4.13 请利用 filter()筛选出回数。回数是指从左向右读和从右向左读都是一样的数,如12321,909。
      • 4.14 假设我们用一组 tuple 表示学生名字和成绩:
      • 4.15 用 filter()把一个序列中的空字符串删掉。
    • 第五章习题
      • 1.编写程序,打开任意的文本文件,读出其中内容,判断该文件中某些给定关键字(如“中国”)出现的次数。
      • 2.编写程序,打开任意文本文件,在指定位置产生一个文件副本,即实现文件复制功能。

正在更新中……@202212.18

第一章习题

1.1 Python语言有哪些特点和缺点?

Python支持命令式编程、函数式编程,完全支持面向对象程序设计,语法简洁清晰,并且拥有大量的几乎支持所有领域应用开发的成熟扩展库。 Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容。用Python开发,许多功能不必从零编写,直接使用现成的即可。除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。 Python同时也支持伪编译将Python源程序转换为字节码来优化程序和提高运行速度,可以在没有安装Python解释器和相关依赖包的平台上运行。 任何编程语言都有缺点,Python缺点主要有: (1)运行速度慢。 (2)代码不能加密。 (3)用缩进来区分语句关系的方式还是给很多初学者带来了困惑。最常见的情况是tab和空格的混用会导致错误。

1.2 Python基本输入输出函数是什么?

用Python进行程序设计,输入是通过input( )函数来实现的,
input( )的一般格式为:x=input(‘提示:’)
该函数返回输入的对象。可输入数字、字符串和其它任意类型对象。
Python 3.7中使用print()函数进行输出。

1.3 如何在IDLE中运行和调试Python程序?

在“Python Shell”窗口中单击“Debug”菜单中的“Debugger”菜单项,就可以启动IDLE的交互式调试器。这时,IDLE会打开的“Debug Control”窗口,并在“Python Shell”窗口中输出“[DEBUG ON]”并后跟一个“>>>”提示符。这样,我们就能像平时那样使用这个“Python Shell”窗口了,只不过现在输入的任何命令都是允许在调试器下。
我们可以在“Debug Control”窗口查看局部变量和全局变量等有关内容。

1.4 为什么要在程序中加入注释?怎么在程序中加入注释?

一个好的、可读性强的程序一般包含20%以上的注释
方法一:以#开始,表示本行#之后的内容为注释。
#循环输出0到9数字
for i in range(10):
print (i, end=’ ‘)
方法二:包含在一对三引号’‘’…‘’'或"“”…“”"之间且不属于任何语句的内容将被解释器认为是注释。

第二章习题

2.1 Python数据类型有哪些?分别什么用途?

Python 数值类型用于存储数值。整型(int) :通常被称为是整型或整数,是正或负整数,不带小数点。长整型(long) :无限大小的整数,整数最后是一个大写或小写的L。在Python3里,只有一种整数类型 int,没有Python2 中的 Long。浮点型(float):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.78e2就是2.78 x 102 = 278)复数(complex):复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的虚部以字母j或J结尾。如:2+3j。

2.2 把下列数学表达式转换成等价的Python表达式。

Python基础入门(夏敏捷等著)课后习题答案全解_第1张图片
(1)

import math a,b,c=1,3,1
expression=(-b+math.sqrt(bb-4ac))/2a
print(expression)

(2)

x,y,a=1,2,3
expression2 = (xx+yy)/(2aa)
print(expression2)

(3)

x,y,z=1,2,3
expression3=(x+y+z)/math.sqrt(x3+y3+z**3)
print(expression3)

(4)

a,c,d=1,2,3
expression4=(3+a)**2/(2c+4d)
print(expression4)

(5)

x,y=1,2
expression5=2*math.sin((x+y)/2)*math.cos((x-y)/2)
print(expression5)

2.3 数学上 3小于x小于10 表示成正确的Python表达式为?

(x>3)and(x<10)

2.4 计算下列表达式的值(可在上机时验证),设a=7,b=-2,c=4。

(1)3 * 4 ** 5 / 2:1536_ (2)a * 3 % 2:1_ (3)a%3 +bb-
c//5:5_ (4)b**2-4
a*c:_-108__

2.5 求列表s=[9,7,8,3,2,1,55,6]中的元素个数,最大数,最小数?如何在列表s中添加一个元素10?如何从列表s中删除一个元素55?

(1)元素个数:print(len(s))
(2)最大数:print(max(s))
(3)最小数:print(min(s))
(4)添加元素:s.append(10)
(5)删除指定元素:s.remove(55)

2.6 元组与列表主要区别?s=(9,7,8,3,2,1,55,6)能添加元素吗?

元祖不能添加元素,列表可以添加元素。元组元素不能修改,但元组可以连接另一个元组,组成一个新元组。

2.7 已知有列表lst=[54,36,75,28,50],请完成以下操作?

(1)列表尾部插入元素52: lst.append(52)
(2)在元素28前面插入66:lst.insert(3,66)
(3)删除并输出28:print(lst.pop(3))
(4)将列表按降序排序:lst.sort(reverse=True)
(5)清空整个列表:lst.clear()

2.8 三个集合,python={…………},java={…………},C={…………},求:

(1)只会python不会C的人:(Python-C)
(2)3种语言都会的人:(python&Java&C)
(3)差并交:-,|,&

第三章习题

3.1 输入一个整数n,判断其能否同时被5和7整除,如能则输出“xx能同时被5和7 整除”,否则输出“xx不能同时被5和7 整除”。要求“xx”为输入的具体数据。

a=int(input(“请输入整数:”))
if a%5 == 0 and a%7 == 0:
print(a,“能被5,7同时整除”)
else:print(a,“不能被5,7同时整除”)

3.2 输入一个百分制的成绩,经判断后输出该成绩的对应等级。其中,90分以上为“A”,80~ 89分为“B”,70~ 79分为“C”,60~69分为“D”,60分以下为“E”。

a=int(input(“请输入整数:”))
if a>=90:
print(‘A’)
elif a>79 and a<90:
print(‘B’)
elif a > 69 and a < 80:
print(‘C’)
elif a > 59 and a < 70:
print(‘D’)
else:print(‘E’)

3.3 某百货公司为了促销,采用购物打折的办法。1000元以上者,按九五折优惠;2000元以上者,按九折优惠;3000元以上者,按八五折优惠;5000元以上者,按八折优惠。编写程序,输入购物款数,计算并输出优惠价。

a=input(“”)
a=int(a)
if a>=5000:
print(“优惠价为:”,a0.8)
elif a>=3000:
print(“优惠价为:”,a
0.85)
elif a>=2000:
print(“优惠价为:”,a0.9)
elif a>=1000:
print(“优惠价为:”,a
0.95)
else:
print(“没有优惠哦! 价格为:”,a)

3.4 编写一个求整数n阶乘(n!)的程序。

n=int(input(“请输入整数n:”))
s,i=1,1
while i<=n:
s=s*i
i=i+1
print(s)

3.5利用while循环创建一个包含10个奇数的列表,然后计算该列表的和与平均值。

lst=[]
for i in range(20):
    if i%2 !=0:
        lst.append(i)
sum1=sum(lst)
sumAve=sum1/10
print(lst,sum1,sumAve)

3.6 编写程序,求1!+3!+5!+7!+9!。

i,s,ss = 1,1,0
for n in range(10):
if n%2!=0:
while i<=n:
s=s*i
i=i+1
ss=ss+s
print(ss)

3.7 计算公式s的值,s =1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)

编写程序,计算下列公式中s的值(n是运行程序时输入的一个正整数)。
s =1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)

s,m,ss=0,1,0
n=int(input(“请输入一个正整数:”))
while m<=n:
s=s+m
m=m+1
ss=s+ss
print(ss)

3.8 枚举法:“百马百瓦问题”

有100匹马驮100块瓦,大马驮3块,小马驮2块,两个马驹驮1块。问大马、小马、马驹各有多少匹?

思路:用嵌套循环来做,要注意前后两个条件的关系,以及两个马驹托一个瓦的条件。
for i in range(34):
for j in range(51):
k=100-i-j
if 3i+2j+k/2100 and k%20 :
print(“大马有:”,i,“小马有:”,j,“马驹有:”,k)

3.9 斐波那契函数问题

有一个数列,其前三项分别为1、2、3,从第四项开始,每项均为其相邻的前三项之和的1/2,问:该数列从第几项开始,其数值超过1200。

lst=[1,2,3]
for i in range(100):#建立一个i到100的for循环
if i>2: #到第三项时候 推出第四项
x=(lst[i-1]+lst[i-2]+lst[i-3])/2
lst.append(x)#将第四项添加到列表末尾
if x>1200:#内部判断那一项大于1200的时候跳出循环
print(i)
break

3.10 找出1与100之间的全部“同构数”。

“同构数”是这样一种数,它出现在它的平方数的右端。例如,5的平方是25,5是25中右端的数,5就是同构数,25也是一个同构数,它的平方是625。

**解:**只要是和100取余,则会剩下个位和十位
for i in range(1,101):
x=i*i
if i<10:
if x%10i:
print(i)
elif i<100:
if x%100
i:
print(i)

3.11 猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半再加一个。到第10天早上想再吃时,发现只剩下一个桃子了。求第一天共摘了多少个桃子。

采用逆向思维:从后往前推。

x2 = 1
for i in range(9,0,-1):
    x1=(x2+1)*2
    x2=x1
print(x1)

已知第10天剩下1个桃子,则可推导出,第9天剩下4个,第8天剩下10个。
由第10天可知,第9天的桃子数量为:
x/2 - 1 = 1
x=4 

3.12 输入一个字符串,然后依次显示该字符串的每个字符以及该字符的Ascii码。

 str=input("请输入一个字符串……")
lst=[0]*len(str)
i = 0
for x in str:
    lst[i]=ord(x)
    i=i+1
print(lst)

3.13 开发猜数字小游戏,计算机随机生成100以内的数字,玩家猜大或猜小都给出提示,直至猜中,同时统计猜测次数。

import random
i=0
secret = random.randint(1, 101)
while 1:
    guess=int(input("请输入100以内的数字:"))
    if guess>secret:
        print("猜大了……")
        i=i+1;
    elif guess<secret:
        print("猜小了……")
        i=i+1;
    elif guess==secret:
        print("猜对了……")
        i=i+1;
        print("你共猜了",i,"次")
        break

3.14 枚举法:已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。

for a in range(1,10):
    for b in range(1,10):
        for c in range(1,10):
            if (a*100+b*10+c+c*100+b*10+a)==1333:
                print(a,b,c)

第四章·函数

4.1 将华氏温度转换为摄氏温度

编写一个函数,将华氏温度转换为摄氏温度。公式为C=(F-32)×5/9。

def revert(f):
    c=(f-32)*5/9
    return c
print(revert(99))

4.2 编写一个函数判断一个数是否为素数,并通过调用该函数求出所有三位数的素数。

def sushu(a,b):
    for i in range(a,b):
        n=True
        for j in range(2,i):
            if i%j==0:
                n=False
                break

        if n==True:
            print(i)
sushu(1,1000)

4.3 编写一个函数,求满足以下条件的最大的n值:

1²+2²+3²+…+n < 1000

def mysum():
    sum=0
    n=0
    while sum<1000:
        n=n+1
        sum=sum+n*n

    return n-1
print(mysum())

4.4 编写一个函数multi(),参数个数不限,返回所有参数的乘积。

def multi(*num):
    sum=1
    for i in num:
        sum=sum*i
    return sum
print(multi(2,3,4))

4.5 编写一个函数,功能是求两个正整数m和n的最小公倍数。

def gcd(m,n):
    if m<n:
        m,n=n,m
    while n!=0:
        temp=m%n
        m=n
        n=temp
    return m
print(gcd(10,3))

4.6 求一元二次方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。要求从主函数输入a,b,c的值。

4.7 编写一个函数,调用该函数能够打印一个由指定字符组成的 n 行金字塔。其中,指定打印的字符和行数 n分别由两个形参表示。

4.8 编写一个判断完数的函数。完数是指一个数恰好等于它的因子之和,如 6=1+2+3,6就是完数。

# ## 编写一个判断完数的函数。完数是指一个数恰好等于它的因子之和,如 6=1+2+3,6就是完数。
def jugge(n):
    sum=0
    for i in range(1,n):    #关键在求因数
        if n%i == 0:
            sum+=i
    if sum==n:
        print(n,"是完数")
    else:
        print(n,"不是完数")
jugge(100)

4.9 编写一个将十进制数转换为二进制数的函数。

# 先搞懂十进制转化为二进制的原理

def binary(n):
    list=[]
    while n//2 !=0:
        list.append(n%2)
        n=n//2
        if n//2==0:
            list.append(n%2)
            break
    for t in list:
        print(t,end='')
    print()

binary(10)

4.10 编写一个判断字符串是否是回文的函数。

回文就是一个字符串从左到右读和从右到左读是完全一样的。例如,“level”、“aaabbaaa”、“ABA”、"1234321"都是回文。

# 回文数
def palindrome(s):
    flag=1
    x=0
    y=len(s)-1
    while x<y:
        if(s[x]!=s[y]):
            flag=0
            break
        x+=1
        y-=1
    return flag
s=input("输入字符串\n")
if(palindrome(s)):
    print("这是回文字符串\n")
else:
    print("这不是回文字符串\n")

4.11 编写一个函数,实现统计字符串中单词的个数并返回。

s="On a Slow Boat to China"
print(len(s.split()))
print(s.split(' '))

推荐阅读Python中的split详解

4.12 利用 map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。例如输入:[‘adam’,LISA’,barT’],输出:[‘Adam’,Lisa’,'Bart]。

map() 函数是一个内置函数,用于将一个列表中的元素映射到另一个列表中。该函数接受一个函数作为参数,该函数接受列表中的元素作为输入,并返回一个列表。

#例如,可以使用 map() 函数来将列表中的元素转换为字符串,并返回一个新的字符串列表:
my_list = [1, 2, 3, 4, 5]      
new_list = map(str, my_list)      
print(new_list)      
def normalize(name):
    return name.capitalize()
L1=['adam','LISA','barT']
L2=list(map(normalize,L1))
print(L2)

#capitalize()函数是Python内置的一个函数,将首字母大写。

4.13 请利用 filter()筛选出回数。回数是指从左向右读和从右向左读都是一样的数,如12321,909。

filter() 函数是一个内置函数,用于从列表中筛选出满足特定条件的元素。该函数接受一个函数作为参数,该函数接受列表中的元素作为输入,并返回一个布尔值。
例如,可以使用 filter() 函数来筛选出列表中所有奇数的列表:

Copy code
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]    
even_list = filter(lambda x: x % 2 == 0, my_list)    
odd_list = filter(lambda x: x % 2 != 0, my_list)    
print(even_list)    
print(odd_list)    
这将输出 [1, 3, 5, 7, 9][2, 4, 6, 8, 10],因为这些元素是奇数。
## 答案在这里~
def is_palindrome(n):
	nn=str(n)	#转成字符串
	return nn==nn[::-1]	#反转字符串并返回
print(list(filter(is_palindrome,range(1,1000))))

4.14 假设我们用一组 tuple 表示学生名字和成绩:

L =[(‘Bob’,75),(‘Adam’,92),(‘Bart’,66),('Lisa’88)]
请用 sorted()对上述列表元素分别按名字排序。

L =[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)]
sorted_list=sorted(L,key=lambda x: x[0])
print(sorted_list)
在这个例子中,key 参数指定了一个 lambda 函数,
该函数接受列表中的元素作为输入,
并返回第一个元素的元组。
由于这个 lambda 函数的返回值用于排序,
因此列表按照第一个元素进行了升序排列。

4.15 用 filter()把一个序列中的空字符串删掉。

def is_null(n):
	return n.strip()
L=filter(is_null,['a','b','','1232','g'])
print(L)

#strip()去除空字符元素
#要注意return返回值
	

第五章习题

1.编写程序,打开任意的文本文件,读出其中内容,判断该文件中某些给定关键字(如“中国”)出现的次数。

#前提:在当前Python同路径下新建一个txt文件,当然指定路径获取其它文件也可以,自己百度一下
f1=open('1.txt',encoding='utf-8')	#编码要指定一下,不然可能译码错误
data=f1.read()
a=data.count('不')
print(data)
print(a)

2.编写程序,打开任意文本文件,在指定位置产生一个文件副本,即实现文件复制功能。

在这里插入代码片

你可能感兴趣的:(Python学习,python,开发语言)