我正在尝试进行python任务,而且我被困住了。 对于以下代码:
import math
# adds math module
# User input
xn = float(input('Enter x (-1 to 1): '))
if -1 < xn <= 1:
xLn = math.log1p(xn)
print('Python ln function: ln(1+x) =', xLn)
print('')
print("# Terms", ' ', 'Approx', ' ', 'Error')
def L(x, y):
x = xn
s = 0
s += abs((-1)**(f+1)*(x**f)/f)
return s
f = 0
while f <= 19:
f = f + 1
print(f, (abs(L(f, xn))))
我想得到这个输出:
Enter x (-1 to 1): .5
Python ln function: ln(1+x) = 0.405465
# Terms Approx Error
1 0.500000 0.094535
2 0.375000 0.030465
3 0.416667 0.011202
until 20
我可以在第一个循环中使用它,但是我需要从2中减去循环1的答案,然后将差异打印到近似值(大约下) 我知道我只需要从我的第一个if语句中减去每个值来得到&#34;错误&#34;,但对于循环之后的大约部分,我丢失了。
这是我的代码给我的输出:
Enter x (-1 to 1): 0.5
Python ln function: ln(1+x) = 0.4054651081081644
# Terms Approx Error
1 0.5
2 0.125
3 0.041666666666666664
until 20
如果您需要更多信息,请与我们联系。 我是python和编码的新手,所以如果这看起来令人困惑,我会提前道歉。
编辑: 好了,今天稍微玩了一下代码后,我已经清理了def L(xn,y),使其更容易阅读。 现在我需要做的就是让第二个循环获取第一个循环的值并将其添加到第二个循环的值。然后它必须为第三个执行此操作并添加第二个,依此类推,直到运行20个循环。 我要做的关闭是使用以下代码:
import math
# adds math module
# User input
xn = float(input('Enter x (-1 to 1): '))
if -1 < xn <= 1:
xLn = math.log1p(xn)
print('Python ln function: ln(1+x) =', xLn)
print('')
print("# Terms", ' ', 'Approx', ' ', 'Error')
def L(xn, y):
while y <= 19:
return (-1)**(y + 1)*(xn ** y)/y
y = 0
while y <= 19:
y = y + 1
x = L(xn, y) # makes it easier to call in the second loop
print(y, (L(xn, y)))
if y <= 2:
y = 2
print(y, L(xn, y) + x) # bring the answer for the first loop and add it to the second
这适用于第一个和第二个循环(参见上面的注释),但不会继续其余的循环。 有什么建议? 我觉得我很亲密哈哈!
答案 0 :(得分:0)
以下是几个选项。以下是由于缺乏明确性而无法完全匹配您的问题的示例,但应指向正确的方向。
# Format templates to print data nicely
HEADING_FORMAT = "{0:<5} {1:<12} {2:<12} {3:<12}"
DATA_FORMAT = "{0:<5} {1:<12.6f} {2:<12.6f} {3:<12}"
# Function that performs a calculation
def func(x, y):
return x + y
示例1:
def main():
print(HEADING_FORMAT.format('#', 'Terms', 'Approx', 'Error'))
# variable to hold previous value
prev = None
for i in range(0, 21):
value = func(i, 10)
# if there is no previous then set it and
# continue to next iteration of loop
if prev is None:
prev = value
continue
# Error is left as empty string
print(DATA_FORMAT.format(i, prev, value, ''))
prev = value
示例2:创建生成器
def main():
print(HEADING_FORMAT.format('#', 'Terms', 'Approx', 'Error'))
# create an iterator
values = iter(func(i, 10) for i in range(0, 21))
# get the first value
prev = next(values, 0)
# iterate through the remaining values
for i, value in enumerate(values, 1):
print(DATA_FORMAT.format(i, prev, value, ''))
prev = value
示例3:列表理解和压缩
def main():
print(HEADING_FORMAT.format('#', 'Terms', 'Approx', 'Error'))
# use list comprehension
values = [func(i, 10) for i in range(0, 21)]
# zip the list with a slice of same list skipping the first
# to form pairs of each value | (0, 1), (1, 2), (2, 3), ...
for i, (v1, v2) in enumerate(zip(values, values[1:]), 1):
print(DATA_FORMAT.format(i, v1, v2, ''))
额外:
如果您需要在生成值时执行其他操作,那么您可以定义自己的生成器以随时生成值。
def ifunc(_from, _to, x):
for i in range(_from, _to + 1):
# maybe something extra here
yield func(i, x)
然后,对于列表组合示例,将替换range(0, 21)
。
values = [value for value in ifunc(0, 20, 10)]
每个主要方法的输出
>>> main()
# Terms Approx Error
1 10.000000 11.000000
2 11.000000 12.000000
3 12.000000 13.000000
4 13.000000 14.000000
5 14.000000 15.000000
6 15.000000 16.000000
7 16.000000 17.000000
8 17.000000 18.000000
9 18.000000 19.000000
10 19.000000 20.000000
11 20.000000 21.000000
12 21.000000 22.000000
13 22.000000 23.000000
14 23.000000 24.000000
15 24.000000 25.000000
16 25.000000 26.000000
17 26.000000 27.000000
18 27.000000 28.000000
19 28.000000 29.000000
20 29.000000 30.000000