2012-10-27 19 views
1

我正在制定一个数学解决方案,它不断打印整数作为小数。像1是1.0,5是5.0,我的代码是:如何使蟒蛇打印1而不是1.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.") 

回答

5

既然你将整数,Python中表示结果作为float,而不是作为一个int。要格式化float S作为你喜欢的话,你将不得不使用字符串格式化:

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

所以将其插入代码:

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

非常感谢,只是测试它,它的工作。感谢您让我的第一篇文章愉快! –

+0

没问题。祝你程序顺利! – Blender

+0

您可能想要显示''{:g}''和''{:.0g}''之间的区别,因为我认为后者可能是他真正想要的。 (值得指出的是,他已经试图将他的数字舍入到最接近的整数,但它不起作用。) – abarnert

0

试试这个,

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

这是你真正想要的吗?

0

当你这样做:

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

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

然后,因为m是一个浮点数,所以b也是一个浮点数。然后,当您通过浮动号码拨打str时,会得到一个小数点。

解决这个问题的正确方法取决于你实际想要做什么。

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

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

这意味着如果说,x1, x2, y1, y2 = 4, 2, 2, 1你会b = 22 - 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)) 

最后,您可以始终保持数字四周,float S(或Decimal S等),从不四舍五入或将它们转换,并迫使他们无论如何打印整数:

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