【问题标题】:How to make python print 1 as opposed to 1.0如何使 python 打印 1 而不是 1.0
【发布时间】:2012-10-27 13:24:08
【问题描述】:

我正在制作一个数学求解程序,它不断将整数打印为小数。比如1是1.0,5是5.0,我的代码是:

print("Type in the cooridinates of the two points.")
    print("")
    print("---------------------")
    print("First point:")
    x1 = int(input("X: "))
    y1 = int(input("Y: "))
    print("")
    print("---------------------")
    print("Second point:")
    x2 = int(input("X: "))
    y2 = int(input("Y: "))
    m = (y1-y2) / (x1-x2)
    b = y1 - m * x1
    round(m, 0)
    round(b, 0)
    print("Completed equation:")
    print("")
    if b < 0:
        print("Y = "+ str(m) +"X - "+ str(b) +".")
    elif b > 0:
        print("Y = "+ str(m) +"X + "+ str(b) +".")
    elif b == 0:
        print("Y = "+ str(m) +"X.")
    input("Press enter to continue.")

【问题讨论】:

    标签: python int


    【解决方案1】:

    由于您要对整数进行除法,Python 将结果表示为 float,而不是 int。要根据需要格式化 floats,您必须使用字符串格式化:

    >>> print('{:g}'.format(3.14))
    3.14
    >>> print('{:g}'.format(3.0))
    3
    

    因此将其插入您的代码中:

    print("Y = {:g}X - {}.".format(m, b))
    

    【讨论】:

    • 你可能想展示'{:g}''{:.0g}'之间的区别,因为我认为后者可能是他真正想要的。 (还值得指出的是,他已经在尝试将他的数字四舍五入到最接近的整数,但它不起作用。)
    【解决方案2】:

    试试这个,

    > x = 10.0
    > print int(x)
    10
    > print x
    > 10.0
    

    这真的是你想要的吗?

    【讨论】:

      【解决方案3】:

      当你这样做时:

      m = (y1-y2) / (x1-x2)
      

      你得到一个浮点数(一个实数的浮点表示),而不是一个整数(一个整数)。

      那么,因为m 是一个浮点数,b 也是一个浮点数。然后,当您在浮点数上调用 str 时,您会得到一个小数点。

      解决此问题的正确方法取决于您实际想要做什么。

      如果你真的只想处理整数,你可以使用整数除法:

      m = (y1-y2) // (x1-x2)
      

      这意味着,如果x1, x2, y1, y2 = 4, 2, 2, 1 你最终会得到b = 2 (2 - 0 * 4)。我怀疑这不是你想要的;您实际上想将 4 乘以 1/2,然后将结果四舍五入。

      在这种情况下,您可以在四舍五入的地方进行转换:

      m = int(round(m, 0))
      b = int(round(b, 0))
      

      请注意,您对round 的现有调用实际上并没有做任何事情; round(m, 0) 不会修改 m,它会返回一个新值,即 m 的舍入版本,您必须将其分配回 m(或其他地方)。

      要考虑的另一件事:您可能确实确实想要一半,而不是“最接近 0.5 的浮点表示”。

      您可能并不真正关心差异 — 除非您使用非常大的整数,否则舍入误差永远不会可见。但如果您确实在意,您可能需要考虑使用第三方精确分数模块(例如,clnum),或者可能是标准库decimal。这意味着您必须更加明确,所以除非您认为有必要,否则我不会这样做。但如果有必要,它看起来像这样:

      m = decimal.Decimal(y1-y2) / (x1-x2)
      b = y1 - m * x1
      m = int(m.to_integral(rounding=decimal.ROUND_HALF_UP))
      b = int(b.to_integral(rounding=decimal.ROUND_HALF_UP))
      

      最后,您可以始终将数字保留为 floats(或 Decimals 等),不要四舍五入或转换它们,并强制它们以整数形式打印:

      print("Y = {:.0g}X - {:.0g}.".format(m, b))
      

      【讨论】:

        猜你喜欢
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2021-08-17
        • 2017-08-29
        • 2013-06-16
        • 1970-01-01
        • 2023-03-26
        相关资源
        最近更新 更多