【Educoder作业】问题求解——for 循环
【 E d u c o d e r Educoder Educoder作业】问题求解——for 循环
学了 f o r for for之后,语法就基本结束了。几乎所有的操作都可以实现了
T 1 T1 T1 打印几何图形
这个题很坑…他输出完了 ∗ * ∗还要补全后面的空格…
n = eval(input())for i in range(1, n + 1):print(' ' * (n - i), '*' * (2 * i - 1), ' ' * (n - i), sep = '')
T 2 T2 T2 用物理知识煮鸡蛋
########## Begin ##########
import math
for t in range(-10, 36, 5) :print("%d\t%d" %(t, 437.3 * math.log((100 - t) / 35)))
########## End ##########
T 3 T3 T3 自然常数
知道了求阶乘的方式,剩下的是容易的
import math
n = int(input())
########## Begin ##########
e = 0
for i in range(0, n + 1) :e += 1 / math.factorial(i)
########## End ##########
print('%.14f' % e) #×ÔÈ»³£Êý=2.71828182845904...
T 4 T4 T4 泰勒级数
同上的。
import math
n = int(input())
x = eval(input()) #输入时采用度数,如30表示30°
x = math.radians(x) #将度转换为弧度,如30°转换为π/6,泰勒展开式中的x要使用弧度
########## Begin ##########
e = 0
if n < 0 :print('输入错误')
else :for i in range(0, n + 1) :e += pow(-1, i) * (x ** (2 * i + 1)) / math.factorial(2 * i + 1)print("%.8f" %e)
########## End ##########
T 5 T5 T5 完全数
水题,扫一下的事儿。
n = int(input())
########## Begin ##########
mdl = 0
for i in range(1, n) :if n % i == 0 :mdl += i
if mdl == n :print('True')
else :print('False')
########## End ##########
T 6 T6 T6 完全数(续)
同上。
########## Begin ##########
for n in range(1, 1000) :mdl = 0for i in range(1, n) :if n % i == 0 :mdl += iif mdl == n :print(n)
########## End ##########
T 7 T7 T7 素数
同上…
用 f l a g flag flag判一下即可
n = int(input())
########## Begin ##########
flag = True
for i in range(2, n) :if n % i == 0 :flag = False
if flag :print('True')
else :print('False')
########## End ##########
T 8 T8 T8 解析解和数值解
这个题是很有价值的。
告诉了我们浮点数不能胡乱的等于
我们之前用 w h i l e while while循环写了一个这个东西:
while t <= math.pi - dlt:S += (f(t) + f(t + dlt)) * dlt / 2t += dlt
这个是有问题的,而且很大。
因为那个判断条件左右是浮点数,由于精度关系很可能最后一段加不上去就导致少了一个小三角形。道理也很简单,因为 π \pi π本身就很小,如果 n n n再很大,最后一步又需要恰好相等,所以在取舍的过程中就容易出现精度误差。
所以我们采用循环第几个矩阵,而不是直接循环第几个函数值:
for i in range(0, n) :S += (f(i * dlt) + f(i * dlt +dlt)) * dlt / 2
完整代码:
import math
n = int(input())
########## Begin ##########
dlt = math.pi / n
S = 0
t = 0
e = math.e
def f(x) :return e ** x * math.sin(x)
# print(dlt)
for i in range(0, n) :S += (f(i * dlt) + f(i * dlt +dlt)) * dlt / 2
########## End ##########
print('%.4f' % S) #解析解=12.0703...
发布评论