测验4: 程序的控制结构 (第4周)
这是python123官网上联合MOOC的Python程序设计(第10期)答案
单选题
像这种看程序出结果的题,把握不准的话可以拿代码进IDE里跑一下,结果肯定是妥妥的。
程序题
1.四位玫瑰数
解法一,把四位数的个十百千位分别求出来,然后进行4次幂求和,最后判断,等于自身就进行输出,这种解法比较基础和常规。
for i in range(1000,10000):
temp=i
# abcd分别是个十百千位
a=i%10
i=i//10
b=i%10
i=i//10
c=i%10
d=i//10
if(pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4)==temp):
print(temp)
解法二,把四位数转换为字符串,对字符串的每一位再进行4次幂求和,省去了分别求个十百千位的时间,这种解法很妙哦。
for i in range(1000,10000):
s=str(i)
if(pow(int(s[0]),4)+pow(int(s[1]),4)+pow(int(s[2]),4)+pow(int(s[3]),4)==i):
print(i)
2.100以内素数之和
这个题的本质就是判断素数,将100以内的素数判断出来再相加即可。这里我使用了函数,主要是为了让程序更方便易读
朴素版素数判断
def isBool(n):
for i in range(2,n):
if(n%i==0):
return False
return True
if __name__ == '__main__':
sum=2
for i in range(3,100):
if(isBool(i)):
sum+=i
print(sum)
优化版素数判断
import math
def isBool(n):
temp=int(math.sqrt(n))
for i in range(2,temp+1):
if(n%i==0):
return False
return True
if __name__ == '__main__':
sum=2
for i in range(3,100):
if(isBool(i)):
sum+=i
print(sum)