有自己写的代码和课后参考答案,有的题会有批注解释,会和答案进行比对,做出分析,指出区别和需要改进的地方
# 第三章课后题 # 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