云计算工坊:python运维专练2 答案
人机交互
print函数
描述
输入一个正整数 n,在一行中输出从 1 到 n,中间无空格。
输入格式
输入一个正整数 n
输出格式
在一行中输出从 1 到 n,中间无空格
代码
n = int(input()) for i in range(1, n + 1): print(i, end='') # 用函数实现 def s_num(n): for i in range(1, n + 1): print(i, end='') if __name__ == '__main__': n = int(input()) s_num(n)
输出数字序列练习
描述
range(n) (n > 0)可产生一个包含0-(n-1)的整数序列,程序语句for var in range(n): 可将range(n) 产生的整数序列中的每一个值依次赋给变量var,补充完整下面的程序,使之输出要求的格式。
n = int(input()) # 输入一个正整数 n for i in range(n): print(补充代码) # 每行一个数字输出 0 -(n-1) for i in range(n): print(补充代码) # 在一行内输出 0 -(n-1),每个数字后输出一个空格 print() # 此行保留,不要修改 for i in range(n): print(补充代码) # 在一行内输出 0 -(n-1),每个数字间没有分格 print() # 此行保留,不要修改 for i in range(n): print(补充代码) # 在一行内输出 0 -(n-1),每个数字后输出一个逗号 print() # 此行保留,不要修改 for i in range(n): if i != n - 1: # 当i不是最后一个数时,每个数字后输出一个逗号 print(补充代码) else: print(补充代码) # 当i是最后一个数时,数字后不能有逗号
输入
输入一个正整数 n
输出
0 1 2 3...n-1
0123...n-1
0,1,2,3,...,n-1,
0,1,2,3,...,n-1,
代码
n = int(input()) # 输入一个正整数 n for i in range(n): print(i) # 每行一个数字输出 0 -(n-1) for i in range(n): print(i, end=' ') # 在一行内输出 0 -(n-1),每个数字后输出一个空格 print() # 此行保留,不要修改 for i in range(n): print(i, end='') # 在一行内输出 0 -(n-1),每个数字间没有分格 print() # 此行保留,不要修改 for i in range(n): print(i, end=',') # 在一行内输出 0 -(n-1),每个数字后输出一个逗号 print() # 此行保留,不要修改 for i in range(n): if i != n - 1: print(i, end=',') # 在一行内输出 0 -(n-1),每个数字后输出一个逗号,最后一个数字后不能有逗号 else: print(i)
自我介绍
描述
输入自己的姓名、来自哪里和爱好,按指定的格式输出到屏幕上。
输入
第一行输入姓名
第二行输入籍贯
第三行输入爱好
输出
我的名字是***,来自**,我的爱好是***!
(**由用户输入的字符串替代)
代码
name = input() city = input() hobby = input() print('我的名字是{},来自{},我的爱好是{}!'.format(name, city, hobby)) # 或 name = input() city = input() hobby = input() print(f'我的名字是{name},来自{city},我的爱好是{hobby}!')
数值运算
三角函数计算
描述
根据下面公式计算并输出x的值,a和b的值由用户输入,括号里的数字是角度值, 要求圆周率的值使用数学常数math.pi,三角函数的值用math库中对应的函数进行计算 。
输入格式
输入包括两行, 每行一个数字。
输出格式
表达式的值。
代码
import math a = eval(input()) b = eval(input()) x = (-b+math.sqrt(2 * a * math.sin(math.pi / 3)*math.cos(math.pi / 3)))/(2 * a) print(x)
表达式求值
描述
利用下面公式计算并输出 x 的值。
(提示:开平方可以用指数运算 a ** (1 / 2) 或 a ** 0.5来实现,也引入数学库math,再用数学库中的math.sqrt()函数实现)
输入格式
在 3 行中分别输入一个浮点数(测试数据保证根号下的值大于或等于 0,且a不为零 )
输出格式
一个实数,严格保留小数点后2位数字。
代码
a = float(input()) b = float(input()) c = float(input()) x = (-b + (b * b - 4 * a * c) ** (1 / 2)) / (2 * a) # (1/2)要加括号,否则幂运算优先级高,(2*a)要加括号 print('{:.2f}'.format(x))
除法运算
描述
输入两个整数 a 和 b,计算并输出他们 a 对 b 做整除和 a 除以 b 的结果。
输入格式
第一行输入一个整数 a
第二行输入一个整数 b
输出格式
第一行输出 a 对 b 做整除的结果
第二行输出 a 除以 b 的结果
代码
def division(a, b): print(a // b) # a 对b 整除 print(a / b) # a 除以b if __name__ == '__main__': a = int(input()) # 输入转整数 b = int(input()) division(a, b)
存款利息
描述
在三行中依次输入初始金额,年限,利率,计算并输出存款到期时的利息(不含本金,税前),结果保留2位小数。
输入输出格式
第一行输入一个正整数(金额)
第二行输入一个正整数(年限)
第三行输入一个浮点数(利率)
输出格式
利息=计算结果
代码
a = eval(input()) b = eval(input()) c = eval(input()) i = a * pow((1 + c), b) - a # 计算b年后利息 print("利息={:.2f}".format(i))
三角形周长及面积
描述
输入的三角形的三条边a、b、c 的长度,计算并依次输出三角形的周长和面积。测试用例的数据保证三角形三边数据可以构成三角形。
三角形面积计算公式: ,其中s=(a+b+c)/2。
import math #导入math库 math.sqrt(x) #调用sqrt函数实现开平方运算,x表示要求值的数据 # 或用幂运算 x ** 0.5 表示开平方
输入输出格式
分三行输入 3 个浮点数,表示三角形的三个边长
输出格式
三角形的周长和面积,格式参考示例
代码
import math # 导入math库 a = eval(input()) b = eval(input()) c = eval(input()) s = (a + b + c) / 2.0 m = (s * (s - a) * (s - b) * (s - c)) ** 0.5 # m=math.sqrt(s * (s - a) * (s - b) * (s - c)) # 第二种开根号方法 print("周长={:.2f}".format(a + b + c)) print("面积={:.2f}".format(m))
简单循环
求数列前n项的平方和
描述
现有数列:1,2,3,4,……,n,计算并输出其前n项的平方和,即求:
1×1+2×2+3×3+……+n×n的和。
输入
输入一个正整数 n
输出
数列前n项的平方和
代码
#1×1+2×2+3×3……的前n项和 n = int(input()) sum = 0 for i in range(1,n+1): sum = sum + i * i print(sum)
输出0-9的数字
描述
在同一行内输出 0-9 中的前 n 个数字,输出的每个数字后跟一个空格。
输入
输入一个不大于10的正整数 n
输出
在同一行中输出 0~(n-1) 的数字
代码
n=int(input()) for i in range(n): print(i,end=' ')
2的n次方
描述
计算并输出 2 的 n 次方,n 由用户输入 。
输入格式
输入一个非负整数 n
输出格式
输出这个数的 n 次方
代码
n = eval(input()) print(pow(2,n)) #pow(x,y[,z])同x**y%z,常省略z,用于计算x的y次方
十进制整数转二进制
描述
十进制整数转二进制的方法是:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序即可得到对应的二进制数的各位。
例如:22转二进制的计算过程:
22 / 2 11 余0 11/2 5 余 1 5 /2 2 余 1 2 /2 1 余 0 1 /2 0 余 1
得到22的二进制是10110
输入格式
输入一个正整数
输出格式
输出对应的二进制数
代码
num = int(input()) s='' if num==0: s='0' while num!=0: s=s+str(num%2) # 将num对2取余的结果转字符串拼接到s num = num//2 print(s[::-1]) # 逆序输出字符串
简单分支
a除以b
描述
输出实数a除以b的结果,计算结果四舍五入,保留2位小数。
输入格式
输入包括两行, 每行一个实数, b不能等于0
输出格式
当用户输入b为0时输出"除零错误"
其他情况下输出一个保留2位小数的实数
代码
a = eval(input()) b = eval(input()) if b != 0: print(round(a / b, 2)) else: print('除零错误')
一元二次方程求根
描述
一元二次方程ax2+bx+c=0,a、b、c的值由用户在三行中输入,根据用户输入的数值求解方程的实数解:
如果a值 为0,根据b值判断方程是否有解并输出,如果a与b同时为0,则输出Data error!
如果方程无实数解,输出“该方程无实数解”;
如果方程有两个相同的实数解,输出一个解,结果保留2位小数;
如果方程有两个不同的实数解,在一行内按从大到小顺序输出方程的两个解,用空格分隔,结果保留2位小数。
输入格式
输入三行数据, 每行输入一个实数
输出格式
方程的解
代码
a = float(input()) b = float(input()) c = float(input()) delta = b * b - 4 * a * c if a == 0 and b != 0: #print( round(- c / b,2)) print('{:.2f}'.format(- c / b)) elif a == 0 and b == 0: print('Data error!') elif delta < 0: print("该方程无实数解") elif delta == 0: #print(round(-b / (2 * a),2)) print('{:.2f}'.format(-b / (2 * a))) else: x1 = (-b + delta ** 0.5) /( a * 2) x2 = (-b - delta ** 0.5) /(a * 2) if x1 < x2: x1,x2=x2,x1 #print(round(x1,2),round(x2,2)) # round()函数获得的浮点数会自动转为最短表示,例如rount(3.10000, 2) 的结果是3.1,而不是3.10 print('{:.2f} {:.2f}'.format(x1,x2)) # str.format()的方法可以严格按约定保留小数位数,例如'{:.2f}'.format(3.100000) 的结果是3.10
流程控制
老鼠打洞
描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思就是说,有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
(注:本题禁止使用幂运算)
输入格式
输入1个整数,代表墙的厚度,单位为尺
输出格式
第一行输出1个整数,表示相遇时所需的天数
第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。
代码
n = int(input()) rat, mouse, day, time = 1, 1, 0, 1 distance_of_rat, distance_of_mouse = 0, 0 # 大老鼠和小老鼠的打洞距离 while n > 0: if n - mouse - rat < 0: time = n / (mouse + rat) n = n - mouse - rat distance_of_mouse = distance_of_mouse + time * mouse distance_of_rat = distance_of_rat + time * rat rat = rat * 2 mouse = mouse / 2 day = day + 1 print(day) print(round(distance_of_mouse, 1), round(distance_of_rat, 1))