python3 第四章课后习题答案

目录

1.选择题

2.简答题

(1)程序流程图包括哪些元素?

(2)pass语句的作用是什么?

(3)跳转语句break和continue的区别是什么?

(4)简述for循环和while循环的执行过程。

3.阅读程序

(1)下面程序的功能是什么?

(2)以下程序的输出结果是什么?

(3)下面程序的输出结果是什么?

4.编程题

(1)给定某一字符串s,对其中的每一字符c进行大小写转换:如果c是大写字母,将它转换成小写字母;如果c是小写字母,则将它转换成大写字母;如果不是字母,则不进行转换。

(2)输入一个整数,将各位数字反转后输出

(3)计算1^2-2^2+3^2-4^2+···+97^2-98^2+99^2

(4)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因比6就是“完数”。请编程找出100内的所有完数。

(5)输人两个正整数m和n,求其最大公约数和最小公倍数。

提示:在循环中,用较大数(初始值为m、n中的较大数)除以较小的数(初始值为m、n中的较小数),然后将小的一个数作为下一轮循环中较大的数,较大数除以较小数所取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0时,返回较大的数,此数即为m和n的最大公约数、最小公倍数为两数之积除以最大公约数。

(6)输入一元二次方程的3个系数a,b,c,求方程ax^2+bx+c的根


1.选择题

1.c

2.b:这道题,我做错了,我就写一下注释,x=2为整型,y=2.0为浮点型,两者不能用于作比较,作比较可定是不相等。

3.a 4.d 5.a 6.d 7.b 8.d 9.c 10.d 11.a

12.d:这道题我也做错了,就解释一下。strip([char])在字符串上指向lstrip()删除左边的空格和rstrip()删除末尾的空格,s.strip(",")为删除最左边和最右边两侧的逗号,最左侧没有逗号,最右侧有逗号,那就删去。replace(",",";")将逗号替换成分号,strip在前先执行strip,后执行replace,所以为d选项。

2.简答题

(1)程序流程图包括哪些元素?

控制流;处理流;判断流;起始框和结束框

(2)pass语句的作用是什么?

pass为空语句,一般用作占位,该语句不影响其后语句的执行,为了保持程序结构的完整性而设计的

(3)跳转语句break和continue的区别是什么?

break语句:从循环体内部跳出,即结束循环,俗称断路语句

continue语句:终止当前这一轮语句,即跳过本轮剩余的语句,直接进入下一轮语句,俗称短路语句

区别:break是跳出循环,即结束循环;continue是跳出本次循环,如果循环还是没结束,那就进入下一次循环。

(4)简述for循环和while循环的执行过程。

for循环在每次循环之前都会执行初始化部分,然后判断循环条件是否满足,如果满足,则执行循环体内的代码,再执行循环变量的更新操作。

while循环:每次循环执行之前会先判断是否满足循环条件,如果满足则执行循环体内代码

for循环简洁,适合循环次数已知的情况,while循环更加灵活,适合循环次数未知的情况下使用

3.阅读程序

(1)下面程序的功能是什么?

a,b=2,1
sum=0
for i in range(20):
   sum+=a/b
   t=a
   a=a+b
   b=t
print(sum)

先是给a,b,sum赋值,分别是2,1,0;然后是利用 for循环,每次循环都将 a除以 b加 sum的值赋值给sum,t为中间变量,将a+b的值赋值给a,将a原先的值赋值给b,循环20次后打印 sum的值。

(2)以下程序的输出结果是什么?

for i in range(1,8):
 if i%4==0:
     break
 else:
     print(i,end=",")

i从1开始,到4结束,假如 i%4=0,则会跳出循环,反之,打印 i的值。

i=1,i=2,i=3,输出结果:1,2,3,

(3)下面程序的输出结果是什么?

x="god"
y=""
for i in x:
    y+=str(ord(i)-ord('a'))
print(y)

ord()函数用于返回表示单个字符的Unicode码点。你也可以理解为ASCII值。

ord(character)其中character:表示要获取的unicode码点的字符。逆操作是chr()函数,它是接受一个Unicode码点,并返回对应的字符

print(ord('A'))  # 输出 65,因为大写字母 A 的 Unicode 码点是 65
print(ord('€'))  # 输出 8364,因为欧元符号 € 的 Unicode 码点是 8364

str()用于将给定的对象转换为字符串。

num = 42 str_num = str(num) # 将整数 42 转换为字符串 '42' 
​
float_num = 3.14 
str_float_num = str(float_num) # 将浮点数 3.14 转换为字符串 '3.14' 
​
my_list = [1, 2, 3] 
str_list = str(my_list) # 将列表 [1, 2, 3] 转换为字符串 '[1, 2, 3]'

输出结果:6143

4.编程题

(1)给定某一字符串s,对其中的每一字符c进行大小写转换:如果c是大写字母,将它转换成小写字母;如果c是小写字母,则将它转换成大写字母;如果不是字母,则不进行转换。

a=input("请输入一个字符串:")
if a.find('c')!=-1:
    b=a.replace('c','x')
if b.find('C')!=-1:
    c=b.replace('C','c').replace('x','C')   #这个是正确的方法
print(c)
a=input("请输入一个字符串:")
if a.find('c')!=-1:
    b=a.replace('c','C')
if b.find('C')!=-1:
    c=b.replace('C','c')
print(c)

这个有逻辑错误,显示将 c变为 C,又将 C变为 c,这个是逻辑错误。希望大家引以为戒

(2)输入一个整数,将各位数字反转后输出

number=input("请输入一个整数:")
reversed_number=int(str(number)[::-1])
print(reversed_number)

(3)计算1^2-2^2+3^2-4^2+···+97^2-98^2+99^2

sum=0
for i in range(1,100):
    if i%2==0:
        sum-=i*i
    else:
        sum+=i*i
print(sum)

(4)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因比6就是“完数”。请编程找出100内的所有完数。

for i in range(1,100):
    sum=0
    for j in range(1,int(i/2+1)):
        if i%j==0:
            sum+=j
    if i==sum:
        print(i)
        print("是完数")           

(5)输人两个正整数m和n,求其最大公约数和最小公倍数。

提示:在循环中,用较大数(初始值为m、n中的较大数)除以较小的数(初始值为m、n中的较小数),然后将小的一个数作为下一轮循环中较大的数,较大数除以较小数所取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0时,返回较大的数,此数即为m和n的最大公约数、最小公倍数为两数之积除以最大公约数。

print("m,n必须是正整数且m不等于n")
m=int(input("please enter m:"))
n=int(input("please enter n:"))
a=m    #后面还要用到m的值
b=n    #后面还要用到n的值
#x=0  可以不对x进行初始化
if m<=0 or n<=0 or n==m:
  print("m,n必须是正整数且m不等于n")
else:
  if m>n:
    while m%n!=0:
      m,n=n,m%n
      if n==0:
        break
    print(f"{n}是最大公约数")  
    x=a*b/n
    print(f"{x}是最小公倍数")
  else: 
    while n%m!=0:
      n,m=m,n%m   
      if  m==0:
        break
    print(f"{m}是最大公约数")
    x=a*b/m
    print(f"{x}是最小公倍数")  #这个是我自己写的可能有些麻烦

(6)输入一元二次方程的3个系数a,b,c,求方程ax^2+bx+c的根

import cmath
​
a=float(input("请输入二次项系数a:"))
b=float(input("请输入一次项系数b:"))
c=float(input("请输入常数项系数c:"))
​
if a==0:
    print("请重新输入")
else:
    discriminant=(b**2-4*a*c)
    
    if discriminant<0:
        print("无实数解")
    else:
        root1=(-b+cmath.sqrt(discriminant))/(2*a)
        root2=(-b-cmath.sqrt(discriminant))/(2*a)
        print(f"两个根分别为:{root1}和{root2}")
#cmath为复数库

  • 51
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值