云计算工坊:python运维专练3 答案
简单循环
分数序列求和
描述
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和,n由用户输入。
输入格式
输入一个正整数
输出格式
前n项和
输入输出示例
输入 输出 示例 1 5 8.391666666666667
代码
# 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和,n由用户输入。 # 除了首项,分子位前一项分子分母只和,分母为前一项分子 n = int(input()) sumn = 0 a,b=2,1 for i in range(1,n + 1): sumn=sumn+a/b b,a=a,a+b print(sumn)
百钱买百鸡A
描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?
输入格式
该题目没有输入
输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
如果有多组解时,按鸡翁数量由少到多输出;
代码
for x in range(1,20): # x不为0,初值设1 for y in range(1,34): # y不为0,初值设1 z=100-x-y if z != 0 and z%3==0 and 5*x+3*y+z//3==100: #z不为0,同时满足总价百钱 print(x,y,z)
计算阶乘
描述
用户输入一个非负整数 n,计算并输出其阶乘。
n!=1×2×3×...×n.
输入格式
输入一个非负整数 n
输出格式
n 的阶乘 ====输入输出示例====
输入 输出 5 120 0 1
代码
#用户输入一个正整数,计算其阶乘 import math #print(math.factorial(eval(input()))) n = int(input()) fact = math.factorial(n) print(fact) fact = 1 n = int(input()) for i in range(1,n + 1): fact = fact * i print(fact)
阶乘求和
描述
输入一个正整数n,计算 1!+2!+3!+...+n! 的和并输出。
输入
一个正整数n
输出
从1到n每个数的阶乘的和
代码
# 计算1!+2!+3!+。。。+n! def sum_factorial(n): total, t = 1, 1 for i in range(2, n + 1): t = t * i total = total + t return total n = int(input()) print(sum_factorial(n))
简单分支
今年多少天
描述
闰年366天,其他年份365天。普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
用户输入一个正整数,代表年份,输出该年有多少天?
输入格式
输入一个正整数,表示年份
输出格式
该年的天数
代码
year = int(input()) if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0): #能被400整除是闰年;能被4带队且同时不能被100整除的是闰年 print(366) else: print(365)
判断三角形并计算面积
描述
输入三个数a,b,c, 判断能否以它们为三个边长构成三角形。若能,输出YES和三角形面积(结果保留2位小数),否则输出NO。
输入格式
输入包括三行,每行是一个数字
输出格式
如果输入的三个数字能够组成三角形的三边,则输出为两行,分别是'YES' 和面积值(结果保留2位小数);如果输入的三边不能组成三角形,则输出为'NO'
代码
a = eval(input()) b = eval(input()) c = eval(input()) if a + b - c > 0 and a + c - b > 0 and b + c - a > 0: print('YES') p = (a + b + c) / 2 area = (p * (p - a) * (p - b) * (p - c)) ** (1 / 2) print(area) else: print('NO')
判断是否直角三角形
描述
输入三个数a,b,c, 判断能否以它们为三个边长构成直角三角形。若能,输出YES,否则输出NO。
输入格式
输入包括三行,每行是一个数字
输出格式
'YES' 或'NO'
代码
a = eval(input()) b = eval(input()) c = eval(input()) if a * a + b * b == c * c or a * a + c * c == b * b or c * c + b * b == a * a: print('YES') else: print('NO')
流程控制
判断IP地址合法性
描述
互联网上的每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由'.'分隔开的4个数字组成,每个数字的取值范围是0-255。 现在用户输入一个字符串 s (不含空白符,不含前导0,如001直接输入1),请你判断 s 是否为合法IP,若是,输出'Yes',否则输出'No'。 如用户输入为202.114.88.10, 则输出Yes; 当用户输入202.114.88,则输出No。
输入格式
一个字符串
输出格式
输出'Yes'或'No'
输入输出示例
输入 输出 示例 1 255.255.255.0 Yes
代码
def f(s): lists = s.split('.') if len(lists) != 4: return 'No' for i in range(4): try: tmp = int(lists[i]) if tmp not in range(0, 256): return 'No' except: return 'No' return 'Yes' ip = input() print(f(ip))
判断火车票座位
描述
用户输入一个数字和一个字母组成的座位号,根据字母判断位置是窗口、中间还是过道。目前中国高铁和国内飞机窗口位置的字母是'A'和'F',过道位置是'C'和 'D',中间位置是'B'。每个车厢座位排数是1-17,输入时不区分字母大小写。根据输入判定座位的位置,当输入的数据不是一个合法的座位号时,输出“座位号不存在”。
输入格式
输入一个数字和字母组合成的字符串
输出格式
'窗口'、'中间'、'过道' 或'座位号不存在'
输入输出示例
输入 输出 示例 1 12F 窗口 示例 2 2C 过道 示例 3 1ZZ 座位号不存在
代码
#用户输入一个数字和一个字母组成的座位号,根据字母判断是不是窗口的位置 #目前中国高铁窗口位置的字母是'A'和'F',过道位置是'C'和 'D',中间位置是'B' #数字序号是1-17 import string s = input() if 2 <= len(s) < 4 and 1 < int(s[:-1]) <= 17 and s[-1] in ['A','B','C','D','F','a','b','c','d','f']: if s[-1] in ['A','a','F','f']: print('窗口') elif s[-1] in ['C','c','D','d']: print('过道') #else: #print('您在三人座的中间一个') else: print('输入错误')
函数
自定义幂函数
描述
定义一个函数实现整数的幂运算,用以计算 x 的 n 次方。
输入格式
在一行内输入两个非负整数 x 和 n,数字间用空格分隔。
输出格式
x 的 n 次幂的运算结果
输入输出示例
输入 输出 示例 1 2 3 8
代码
def power(x,n): po=1 for i in range(n): po=po*x return po x,n = map(int,input().split()) print(power(x,n))
字符串
统计单词的数量
描述
输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。
输入
一个英文句子
输出
一个整数,单词数量
输入输出示例
输入 输出 示例 1 Life is short, you need Python! 6
代码
#约定字符串的单词之间用空格分隔,标点符号后跟一个空格 s = input() ls = s.split() print(len(ls))
IP地址异常判定
描述
互联网上的每台设备都有一个IP地址,合法的IP地址格式为为点分隔的4个十进制数,格式如下:
A.B.C.D
其中A、B、C、D均为大于等于0且小于等于 255的整数,每个数字中不会有前导零存在(不需要考虑类似089这样的情况)。 按A.B.C.D格式输入一个字符串,请判断输入的是不是合法IP地址,为合法IP地址时输出“Yes”,否则输出“No”。
输入格式
按A.B.C.D格式输入一个字符串
输出格式
“Yes”或“No”
输入输出示例
输入 输出 示例 1 14a.220.114.8 No
代码
ip = input().split('.') try: ls=[int(i) for i in ip] if len(ls) == 4 and max(ls) <= 255 and min(ls) >= 0: print('Yes') else: print('No') except: print('No')
列表元组
分期付款计算器
描述
购买房屋或大宗家电时,很多时候可以分期付款,还款方式分为等额本息和等额本金两种:
等额本息(Average Capital Plus Interest:ACPI)还款公式: 每月还款额=贷款本金*月利率*(1+月利率)**总还款月数/((1+月利率)**总还款月数-1) 等额本金(Average Capital:AC)还款公式: 每月还款额=贷款本金/总还款月数+(贷款本金-累计已还款本金)*月利率 设计一个程序计算分期付款时每一期的应还款额,还款方式输入错误时,输出“还款方式输入错误”。
输入格式
4行输入:
第1行输入一个浮点数,表示贷款本金
第2行输入一个整数,表示分期月数
第3行输入一个字符串,表示还款方式,限定只能输入"ACPI"或"AC",分别表示等额本息和等额本金
第4行输入一个浮点数,表示月利率
输出格式
输出每月还款额,等额本金方式时,输出的数字间用逗号分隔(用round()函数保留2位小数)
还款方式输入错误时,输出“还款方式输入错误”
代码
price,month,mode,rate = float(input()),int(input()),input(),float(input()) if mode == 'AC': ls = [] for i in range(month): repayment = price / month + (price - price / month * i) * rate ls.append(round(repayment,2)) print(ls) elif mode == 'ACPI': repayment = price * rate * (1 + rate) ** month /((1 + rate) ** month - 1) print(round(repayment,2)) else: print('还款方式输入错误')
绝对值排序
描述
读入一个列表,按照绝对值从大到小排序,如果绝对值相同,则正数在前面。例如列表[3,-4,2,4],排序后的结果为[4,-4,3,2] 建议使用list1=eval(input())直接读入一个列表。
输入
题目的输入为一行,是一个元素类型都是数值的列表,形如[3,-4,2,4]。
输出
输出为一行,是按照绝对值从大到小排序后的列表里的元素,元素之间用一个英文半角逗号分隔,形如4,-4,3,2
代码
list1=eval(input()) list1.sort(key=lambda x:(abs(x),x),reverse=True) print(','.join(map(str,list1)))
集合
字符串去重排序
描述
输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。
输入
一个非空字符串
输出
去重排序后的字符串
代码
ls = list(set(input())) # 字符串转集合去重,再转为列表 ls.sort() # 列表排序 print(''.join(ls)) # 列表中的字符串元素连接为一个字符串