Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我试图解一个方程时,python只使用整数_Python_Python 3.x - Fatal编程技术网

当我试图解一个方程时,python只使用整数

当我试图解一个方程时,python只使用整数,python,python-3.x,Python,Python 3.x,我正在做一个新项目,它就像一个数学网站。我正试图创建一个程序,将解决方程 它通常使用简单的方程,例如x+10=12,但是当我尝试使用指数,如x**2+3=5来计算方程时,它没有给我任何帮助。我相信这段python代码不能使用小数 代码在下面 import math def solve(): x = -1000 while x < 1001: if x**2 + 1 == 4: print("x = " + str(x)) x += 1 solve() 导入数学 def

我正在做一个新项目,它就像一个数学网站。我正试图创建一个程序,将解决方程

它通常使用简单的方程,例如
x+10=12
,但是当我尝试使用指数,如
x**2+3=5
来计算方程时,它没有给我任何帮助。我相信这段python代码不能使用小数

代码在下面

import math 

def solve():
 x = -1000
 while x < 1001:
 if x**2 + 1 == 4:
  print("x = " + str(x))
 x += 1

solve()
导入数学
def solve():
x=-1000
当x<1001时:
如果x**2+1==4:
打印(“x=”+str(x))
x+=1
解决()
我希望输出为
1.73205080757
-1.73205080757

但是我什么也得不到(因为它找不到答案)。

您期望的答案介于1和2之间。从-1000开始,递增1。所以你将从-1000到0到1到2到3…跳过你的预期答案

您应该使用以下内容:


(使用浮动,即
x=1.0

查看您的代码,您的最小步长是
1
(x增加了
x+=1
),因此
x
只能是整数。没有这样的整数可以完全满足您的条件
x**2+1==4

这将只检查从x=-1000到x=1000的整数值,即它将询问答案是-1000吗?不,答案是-999吗?没有etc,永远不要尝试1.7或1.73或1.73。。。!答案是浮点而不是整数,因此编写的方法不可能得到它。你需要以某种方式迭代越来越接近的答案。这是一个数学算法设计的问题,我认为,你可以先查找数学公式,如何近似二次解(可能是一些17世纪的数学家做了这个公式!),然后尝试将这个公式转换成Python。如果您不知道Python差异中的float、int和duck typing,请尝试用谷歌搜索一下,这也可能会对您有所帮助。

由于以下两个原因,代码没有给出也不会给出您期望的解决方案:

  • while循环在每一步将x增加1,因此x不可能是浮点数。它将始终是一个整数
  • 在这种情况下,您期望的解有无限小数,因此即使x是一个浮点数,它也永远不会是解方程所需的值
  • 作为备注/建议,如果您试图用python求解一个方程,为什么不创建一个函数,将结果赋给一个形式为:x^2+a=b的方程呢。以下代码应为示例:

    import numpy as np
    
    def solve_prueba(a,b):
    
        """ 
    
        The function solves a function of the form x^2 + a = b 
    
        """
    
        x = np.sqrt((b-a))
    
        return x
    
    这种方法比创建while循环要省时得多。while循环必须通过所有具有无穷小数的数字来给出给定方程的解


    祝你好运

    无需从
    -1000
    开始,然后上升到
    1000
    ,因为您正在查找从
    1
    2
    的值。在代码中,以1递增,这意味着
    x
    永远不会是十进制值。但是,您可以使用非常小的数字(例如,
    x+=0.0000000000001
    来增加

    如果使用这个小增量,可能应该使用
    math.isclose()
    而不是
    =
    ,因为小浮点值往往会有一些精度错误。就像在您的预期答案中,您预期结果是
    1.73205080757
    although
    1.73205080757**2+1==4.000000000003889
    而不是
    4

    像这样使用
    math.isclose((x**2+3),4,rel_tol=1e-9)
    它检查
    x**2+3
    的计算是否接近
    4
    ,公差为
    1e-9
    ,这将输出您期望从该等式得到的值

    因此,对于您的代码:

    import math 
    
    def solve():
        x = -1000
        while x < 1001:
        if math.isclose((x**2 + 1), 4, rel_rol=1e-9):
            print("x = " + str(x))
        x += 0.0000000000001
    
    solve()
    
    导入数学
    def solve():
    x=-1000
    当x<1001时:
    如果数学是封闭的((x**2+1),4,相对值=1e-9):
    打印(“x=”+str(x))
    x+=0.0000000000001
    解决()
    
    为此,您应该使用SymPy之类的库
    x+=1
    将只允许
    x
    为整数