Python 打印结果时强制使用小数位数

Python 打印结果时强制使用小数位数,python,printing,decimal,evaluation,Python,Printing,Decimal,Evaluation,不同的练习。这个人要求计算x-2=ln(x)的x值。有两种方法(A和B)-一种方法利用给定的方程并产生较小的解(x1)。另一种方法使用e**(x-2)=x并产生另一种解(x2) 程序绘制图形解决方案,然后查询初始值输入。然后使用适当的方法计算x。进近A要求初始条件小于x2,进近B要求初始条件大于x1。这两种方法都适用于介于x1和x2之间的初始条件 代码的最后一部分操纵输出以仅打印唯一的解决方案 # imports necessary modules import matplotlib.pypl

不同的练习。这个人要求计算x-2=ln(x)的x值。有两种方法(A和B)-一种方法利用给定的方程并产生较小的解(x1)。另一种方法使用e**(x-2)=x并产生另一种解(x2)

程序绘制图形解决方案,然后查询初始值输入。然后使用适当的方法计算x。进近A要求初始条件小于x2,进近B要求初始条件大于x1。这两种方法都适用于介于x1和x2之间的初始条件

代码的最后一部分操纵输出以仅打印唯一的解决方案

# imports necessary modules

import matplotlib.pyplot as plt
import numpy as np

# plots the equation to provide insight into possible solutions

p = []
x = np.arange(0,5,0.01)
f = x - 2
g = np.log(x)

plt.plot(x,f)
plt.plot(x,g)

plt.show()

# x - 2 = ln(x)

print
lista = map(float, raw_input("Provide the starting conditions to establish the approximate value of the solutions to x-2=ln(x) (separate with spacebar): ").split(" "))
print
sigdig = int(raw_input("Define the number of significant digits (up to 15): "))
print

results1 = []
results2 = []
results3 = []
results4 = []

results = []
resu = []

for i in lista:

    if i > 0.1586:
        y = i

        left = y - 2
        right = np.log(y)
        expo = "%d" % sigdig
        epsi = 10**(-int(expo)-1)
        step = 0

        while abs(left - right) > epsi:
            y = right + 2
            right = np.log(y)
            left = y - 2
            step += 1
            results1.append(y)
        results2.append(results1[-1])

    if i < 3.1462:
        z = i

        left = np.e ** (z - 2)
        right = z
        expo = "%d" % sigdig
        epsi = 10**(-int(expo)-1)
        step = 0

        while abs(left - right) > epsi:
            z = np.e ** (right - 2)
            left = np.e ** (z - 2)
            right = z
            step += 1           
            results3.append(z)
        results4.append(results3[-1])

# combines and evaluates the results

results = results2 + results4

for i in range(len(results)):
    if round(results[i], sigdig) not in resu:
        resu.append(round(results[i], sigdig))
    else:
        pass

print "For given starting conditions following solutions were found:"
print

for i in range(len(resu)):
    printer = '"x_%d = %.' + str(sigdig) + 'f" % (i+1, resu[i])'
    print eval(printer)
#导入必要的模块
将matplotlib.pyplot作为plt导入
将numpy作为np导入
#绘制方程式以深入了解可能的解决方案
p=[]
x=np.arange(0,5,0.01)
f=x-2
g=np.log(x)
平面图(x,f)
平面图(x,g)
plt.show()
#x-2=ln(x)
打印
lista=map(float,raw_输入(“提供起始条件以确定x-2=ln(x)(用空格键分隔))的近似值”)。拆分(“”)
打印
sigdig=int(原始输入(“定义有效位数(最多15位):”)
打印
结果1=[]
结果2=[]
结果3=[]
结果4=[]
结果=[]
resu=[]
对于lista中的我:
如果i>0.1586:
y=i
左=y-2
右=np.log(y)
expo=“%d”%sigdig
epsi=10**(-int(世博会)-1)
步长=0
而abs(左-右)>epsi:
y=右+2
右=np.log(y)
左=y-2
步骤+=1
结果1.追加(y)
结果2.追加(结果1[-1])
如果i<3.1462:
z=i
左=np.e**(z-2)
右=z
expo=“%d”%sigdig
epsi=10**(-int(世博会)-1)
步长=0
而abs(左-右)>epsi:
z=np.e**(右-2)
左=np.e**(z-2)
右=z
步骤+=1
结果3.追加(z)
结果4.追加(结果3[-1])
#合并并评估结果
结果=结果2+结果4
对于范围内的i(len(结果)):
如果四舍五入(结果[i],sigdig)不在结果中:
结果追加(四舍五入(结果[i],sigdig))
其他:
通过
打印“对于给定的启动条件,找到了以下解决方案:”
打印
对于范围内的i(len(resu)):
打印机=“'x_%d=%.+str(sigdig)+'f”%(i+1,结果[i])”
打印评估(打印机)

我的问题是:是否可以从图形解决方案中输入x1和x2(第36行和第53行)的近似值,而不是对它们进行硬编码?是否可以在代码中不存在评估工作的情况下强制执行小数数?打印结果[i]通常会产生在最接近的小数点“0”(接近代码末尾)之前结束的结果。谢谢。

您可以使用类似于C/C++的python格式字符串。当
%
运算符遇到格式字符串中的
*
时,它会在列表中查找整数,并将其用作格式字符串中的常量

以下内容适用于您正在尝试的操作:

print "x_%d = %.*f" % (sigdig,sigdig,resu[i])
如果
result
1.23456
sigdig
3
,则输出:

x_3 = 1.234
请注意,python浮点数是,这意味着它们有大约15个有效数字。例如:

>>> print "x_%d = %.*f" % (30,30,1.0/3.0)
x_30 = 0.333333333333333314829616256247
请注意,小数点后17位的所有内容本质上都是随机垃圾。

我认为你的问题(现在已结束)非常有趣。很遗憾看到它关闭了,所以,我将继续将其作为练习,并将其发布在以下博客上:。请随意评论/添加一些细节


这与这里的这个问题完全无关。向遵循此线程的任何人道歉。

无论您尝试强制执行什么数字:
轮(n,sigfig)
。问题是,我已经对其进行了编码,但它不起作用。它正好在最接近的小数点零之前。这应该是两个问题。你问的是两件完全无关的事情。我是否应该为另一个问题创建另一个主题?是的。您希望实际问题与标题匹配。否则,寻找与您的第一个问题类似信息的人将无法在此处找到线索。对于范围内的i(len(resu)):打印回合(resu[i],sigdig)上述操作不起作用。如果sigdig=30,出于某种原因,它将不会打印30位小数。请参阅。Python浮点数有53位精度,因此要求任何关于15位有效数字的内容都是毫无意义的。如果您更关心精度而不是速度的话,可能是这样。我做了Euler数求值数字,并且使用十进制至少有1000位数字是正确的,所以我想它会起作用。