python.第三章课后题

有自己写的代码和课后参考答案,有的题会有批注解释,会和答案进行比对,做出分析,指出区别和需要改进的地方

# 第三章课后题

# 1.
for i in range(4):
    age = eval(input('请输入第{}位面试者的年龄:'.format(i+1)))
    year = eval(input('             工作年限:'.format(i+1)))
    major = input('                专业:'.format(i+1))
    if major == "计算机":
        if age < 25 :
            print('获得面试机会')
        else:
            print('抱歉,您不符合面试机会')
    elif major == '电子':
        if year > 4:
            print('获得面试机会')
        else:
            print('抱歉,您不符合面试机会')
    elif major == '通讯':
        print('获得面试机会')
    print(" ")

# 课后例题答案
# 可以改进的是if条件,专业和年龄或者工作年限可以用and写在一起

age=int(input("年龄: "))
year=int(input("工作经验: "))
major=input("专业: ")
if major=='计算机' and age<25:
    print(' 获得面试机会')
elif major=='电子' and year>4:
    print(' 获得面试机会')
elif major=='通信':
    print('获得面试机会')
else:
    print(' 抱歉,您不符合面试要求')

# 参考答案

#   age = int(input("请输入你的年龄:"))
# major = input("请输入你的所学专业:")

# work_years = int(input("请输入你的工作经验/年:"))
# print("输入信息为:年龄{}岁,工作{}年,专业是{}".format(age,work_years,major))

# if '计算机' in major and age<25:
#  print("获得面试机会")
# elif '电子' in major and work_years>=4: #.find('电子')>0
#  print("获得面试机会")
# elif '通信' in major:
#  print("获得面试机会")
# else:
#  print("抱歉,您不符合面试要求")

# 请输入你的年龄:25
# 请输入你的所学专业:通信
# 请输入你的工作经验/年:0
# 输入信息为:年龄25岁,工作0年,专业是通信
# 获得面试机会



# 2.
score = float(input('请输入成绩:'))
while score <= 100:
    if score >= 90:
        print('等级:A')
        break
    elif 80 <= score <= 89:
        print('等级:B')
        break
    elif 70 <= score <= 79:
        print('等级:C')
        break
    elif 60 <= score <= 69:
        print('等级:D')
        break
    elif score < 60:
        print('等级:E')
        break
    elif (score > 100) or (score < 0):
        print('成绩有误')
        break

# 课后例题答案
# 区别在于我用了while设置了一个判断
# 答案直接用if,然后else来输出“输入错误“

score=eval(input(" "))
if 90<=score<100:
    print('A')
elif 80<=score<90:
    print('B')
elif 70<=score<80:
    print('C')
elif 60<=score<70:
    print('D')
elif 0<=score<60:
    print('E')
else:
    print('Input error')

# 参考答案

# score = eval(input("请输入您的成绩:"))

# if score<0 or score>100:

#     print("成绩有误")

# elif score >=90:

#     print("等级为A")

# elif score >=80:

#     print("等级为B")

# elif score >=70:

#     print("等级为C")

# elif score >=60:

#     print("等级为D")

# else:

#     print("等级为E")

# 请输入您的成绩:95

# 等级为A



#  3.
c = 0
for i in range(2000,3000+1):
    a = ((i % 4 == 0) and (i % 100 != 0)) or (i % 400 == 0)
    if (a):
        print(i,end=' ')
        c = c + 1
        if c % 10 == 0:
            print(' ')

# 课后例题答案

for i in range(2000,3000+1):
    if (i%4==0 and i%100!=0)or(i%400==0):
        print(i)


# 参考答案

# for year in range(2000,3001):
#   if year%400==0 or (year%100!=0 and year%4==0):
#       print("{:>6}".format(year),end = '')


#       2000  2004  2008  2012  2016  2020  2024  2028  2032
#       2036  2040  2044  2048  2052  2056  2060  2064  2068
#       2072  2076  2080  2084  2088  2092  2096  2104  2108
#       2112  2116  2120  2124  2128  2132  2136  2140  2144
#       2148  2152  2156  2160  2164  2168  2172  2176  2180
#       2184  2188  2192  2196  2204  2208  2212  2216  2220
#       2224  2228  2232  2236  2240  2244  2248  2252  2256
#       2260  2264  2268  2272  2276  2280  2284  2288  2292
#       2296  2304  2308  2312  2316  2320  2324  2328  2332
#       2336  2340  2344  2348  2352  2356  2360  2364  2368
#       2372  2376  2380  2384  2388  2392  2396  2400  2404
#       2408  2412  2416  2420  2424  2428  2432  2436  2440
#       2444  2448  2452  2456  2460  2464  2468  2472  2476
#       2480  2484  2488  2492  2496  2504  2508  2512  2516
#       2520  2524  2528  2532  2536  2540  2544  2548  2552
#       2556  2560  2564  2568  2572  2576  2580  2584  2588
#       2592  2596  2604  2608  2612  2616  2620  2624  2628
#       2636  2640  2644  2648  2652  2656  2660  2664  2668
#       2672  2676  2680  2684  2688  2692  2696  2704  2708
#       2712  2716  2720  2724  2728  2732  2736  2740  2744
#       2752  2756  2760  2764  2768  2772  2776  2780  2784
#       2788  2792  2796  2800  2804  2808  2812  2816  2820



#  4.
from math import *
for i in range(0,90+1,5):
    print(i,'   ',sin(radians(i)),'    ',cos(radians(i)))

# 课后例题答案

import math
for i in range(0,90+1,5):
    ii=math.radians(i)
    print('sin({})={},  cos({})={}'.format(i,math.sin(ii),i,math.cos(ii)))

# 参考答案

# from math import *
# for i in range(0,91,5):
#   angle = radians(i)
#   sin_angle = sin(angle)
#   cos_angle = cos(angle)
#   print("角度为%d度,正弦值为:%.6f,余弦值为:%.6f"%(i,sin_angle,cos_angle))

#   角度为0度,正弦值为:0.000000,余弦值为:1.000000
#   角度为5度,正弦值为:0.087156,余弦值为:0.996195
#   角度为10度,正弦值为:0.173648,余弦值为:0.984808
#   角度为15度,正弦值为:0.258819,余弦值为:0.965926
#   角度为20度,正弦值为:0.342020,余弦值为:0.939693
#   角度为25度,正弦值为:0.422618,余弦值为:0.906308
#   角度为30度,正弦值为:0.500000,余弦值为:0.866025
#   角度为35度,正弦值为:0.573576,余弦值为:0.819152
#   角度为40度,正弦值为:0.642788,余弦值为:0.766044
#   角度为45度,正弦值为:0.707107,余弦值为:0.707107
#   角度为50度,正弦值为:0.766044,余弦值为:0.642788
#   角度为55度,正弦值为:0.819152,余弦值为:0.573576
#   角度为60度,正弦值为:0.866025,余弦值为:0.500000
#   角度为65度,正弦值为:0.906308,余弦值为:0.422618
#   角度为70度,正弦值为:0.939693,余弦值为:0.342020
#   角度为75度,正弦值为:0.965926,余弦值为:0.258819
#   角度为80度,正弦值为:0.984808,余弦值为:0.173648
#   角度为85度,正弦值为:0.996195,余弦值为:0.087156
#   角度为90度,正弦值为:1.000000,余弦值为:0.000000



# 5.
n = eval(input('输入一个正整数:'))
mx = 1
for i in range(1,n+1):
    if i % 17 == 0:
      if i > mx :
          mx = i
print(mx)

# 或者
n = eval(input('输入一个正整数:'))
mx = 1
for i in range(n,1,-1):
    if i % 17 == 0:
      break
print(i)

# 课后例题答案
# 区别在于我用的是for语句,设置一个mx来保存最大数
# 答案用的是while语句,而且还考虑到了若输入的数小于17的情况
# 用到了循环语句里面的else用法
# 这些细节都要注意

n=int(input('请输入一个正整数: '))
while(n>=17):
    if n%17==0:
        print(n)
        break   # 要注意有break
    else:
        n -= 1
else:
    print('n<17,没有答案')


# 参考答案

# n = int(input("请输入一个正整数:"))

# max_n = 0

# for i in range(n):

#     if i%17 == 0:

#         max_n = i

# print(max_n)

# 请输入一个正整数:799

# 782


# 6.
from math import *
n = eval(input('请输入一个正整数:'))
print('1的平方根为1,sqrt函数求得的平方根为1')
for i in range(2,n+1):
    y = 1
    while abs(i-y*y) > 1e-8:
        y = (y + i/y)/2
    print('{}的平方根为{},sqrt函数求得的平方根为{}'.format(i,y,sqrt(i)))


# 课后例题答案

import math
num = int(input("输入一个正整数: "))
for x in range(1,num+1):
    n = 0
    y = 1.0
    while abs(y*y-x)>1e-8:
        y = (y+x/y)/2
        n = n+1
    print("{}的平方根为{}".format(x,y),end='     ')
    print("sqrt求平方根为", math.sqrt(x))

# 参考答案

# import math

# n = int(input("请输入数据:"))

# for x in range(0,n+1):

#     y = 1.0

#     while abs(y*y-x)>1e-8:

#         y = (y + x/y)/2

#     print("数值{},其平方跟为:{}".format(x,y))

#     print('使用sqrt求平方根为:{}\n'.format(math.sqrt(x)))

# 请输入数据:7

# 数值0,其平方跟为:6.103515625e-05

# 使用sqrt求平方根为:0.0

# 数值1,其平方跟为:1.0

# 使用sqrt求平方根为:1.0

# 数值2,其平方跟为:1.4142135623746899

# 使用sqrt求平方根为:1.4142135623730951

# 数值3,其平方跟为:1.7320508100147274

# 使用sqrt求平方根为:1.7320508075688772

# 数值4,其平方跟为:2.000000000000002

# 使用sqrt求平方根为:2.0

# 数值5,其平方跟为:2.236067977499978

# 使用sqrt求平方根为:2.23606797749979

# 数值6,其平方跟为:2.4494897427875517

# 使用sqrt求平方根为:2.449489742783178

# 数值7,其平方跟为:2.6457513111113693

# 使用sqrt求平方根为:2.6457513110645907


# 7.
n = eval(input('请输入一个正整数:'))
s = 1
for i in range(2,n+1):
    a = (-1)**(i)*1/(2*i - 1)
    s = s + a
print(s)

# 课后例题答案

n=int(input("请输入项数:"))
sum=1
for i in range(1,n):
    sum=sum+(-1)**(i+1)*(1/(2*i+1))
print(sum)

# 参考答案

# n = int(input("请输入n的值:"))

# s = 1

# for i in range(2,n+1):

#     print("第{}项,符号为{},分母为{}".format(i,(-1)**i,2*i-1))

#     s = s + (-1)**(i)/(2*i-1)

# print("共求了{}项的和,其和为{}".format(n,s))

# 请输入n的值:7

# 第2项,符号为1,分母为3

# 第3项,符号为-1,分母为5

# 第4项,符号为1,分母为7

# 第5项,符号为-1,分母为9

# 第6项,符号为1,分母为11

# 第7项,符号为-1,分母为13

# 共求了7项的和,其和为1.179065379065379



# 8.
from random import *
a = randint(1,100)
b = randint(1,100)
c = randint(1,100)
for i in range(min(a,b,c),0,-1):
    if (a % i == 0) and (b % i == 0) and (c % i == 0):
        print('{},{},{}的最大公约数为{}'.format(a,b,c,i))
        a1 = a // i
        b1 = b // i
        c1 = c // i
        print('{},{},{}的最小公倍数为{}'.format(a, b, c, i*a1*b1*c1))


# 课后例题答案(但是有点出入,我写的题目是产生三个1-100的随机整数)
# (答案给的题目是输入1-100的三个整数)
# 我认为这个答案没有我写的简单

a = int(input(""))
b = int(input(""))
c = int(input(""))
# 最大公约数
# 答案是两个两个找最大公约数
if a > b:
    t = a
    a = b      # 为了找出a b 中的最小数
    b = t
for n in range(1, a + 1):
    if a % n == 0 and b % n == 0:
        i = [n]     # 用到了列表知识
        i.sort()
m = i[-1]
if m > c:
    l = m
    m = c      # 为了找出那个最小的数
    c = l
for n in range(1, m + 1):
    if m % n == 0 and c % n == 0:
        p = [n]
        p.sort()
print(str(p[-1]))
# 最小公倍数
number = 1      # 从最小的那个开始一次验证条件
while True:     # 找到第一个符合符合的即为 最小 的公倍数
    if number%a==0 and number%b==0 and number%c==0:
        print(str(number))
        break
    else:
        number+=1

# 下面是我写的求最小公倍数
# 验证过了这个也可以
# p = int(str(p[-1]))
# k = p*(a // p)*(b // p)*(c // p)
# print(k)

# 参考答案

# from random import *

# a = randrange(1,101)

# b = randrange(1,101)

# c = randrange(1,101)

# for i in range(min(a,b,c),0,-1):

#     if a%i==0 and b%i==0 and c%i==0:

#         print("{},{},{}的最大公约数是:{}".format(a,b,c,i))

#         break

# for x in range(max(a,b,c),a*b*c+1):

#     if(x%a == 0 and x%b == 0 and x%c == 0):

#         print('{},{},{}的最小公倍数是:{}'.format(a,b,c,x))

#         break

# 100,64,18的最大公约数是:2

# 100,64,18的最小公倍数是:14400
  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值