我的答案是用相同的代码改变

时间:2015-04-17 19:31:27

标签: python python-3.x

我是一个完整的Python初学者,我正在尝试解决这个问题:

  

如果数字是前n个正数的总和,则称为三角形   某些n的整数例如,10是三角形,因为10 = 1 + 2 + 3 + 4   21是三角形,因为21 = 1 + 2 + 3 + 4 + 5 + 6。编写一个Python程序   找到最小的6位三角形数字。输入它作为你的   回答如下。

我写了这个程序:

n = 0
trinum = 0
while len(str(trinum)) < 6:
    trinum = n*(n+1)/2
    n += 1
print(trinum)

它只适用于我在计算机上安装的python,如果我说while len(str(trinum)) < 8:但它应该是while len(str(trinum)) < 6:。所以我去了http://www.skulpt.org/并在那里运行了我的代码,它给了我while len(str(trinum)) < 6: 的正确答案,就像它应该一样。但它与我安装在计算机上的python一起使用6并不起作用。有没有人知道发生了什么?

6 个答案:

答案 0 :(得分:30)

简答

在Python 3中,除法总是浮点除法。因此,在第一遍中,您会得到str(trinum) == '0.5'之类的内容。哪个不是你想要的。

您正在寻找整数除法。该运算符为//

长答案

除法运算符在Python 2.x中更改为3.x.以前,结果的类型取决于参数。所以1/2进行整数除法,但1./2进行浮点除法。

为了清理这个问题,我们引入了一个新的运营商://。该运算符将始终进行整数除法。

所以在Python 3.x中,这个表达式(4 * 5)/2等于10.0。请注意,此数字小于100,但其中包含4个字符。

如果我们改为(4*5)//2,我们会得到整数10。这将使你的条件成立。

答案 1 :(得分:9)

在Python 2中,/运算符在可能的情况下执行整数除法:&#34; x除以y是余数b,&#34;扔掉&#34; b&#34; (使用%运算符查找&#34; b&#34;)。在Python 3中,/运算符始终执行浮点除法:&#34; x除以y是a.fgh。&#34;使用//运算符在Python 3中获取整数除法。

答案 2 :(得分:8)

这里有两个问题,它们会给你错误的答案。

第一个问题是你正在使用/,这意味着Python 2中的整数除法(以及Skulpt实现的几乎Python语言),但是Python 3中的浮点除法。所以,当你运行它时在使用Python 3的本地计算机上,您将获得浮点数。

第二个问题是你没有检查“6位数以下”你正在检查“6个字符以下”。对于正整数,这些是相同的,但对于浮点数,例如,1035.5只有4位数,但它是6个字符。所以你早点退出。

如果您解决了这两个问题,它至少可以在大多数时间使用。但你真的应该解决这两个问题。

所以:

n = 0
trinum = 0
while trinum < 10**6: # note comparing numbers, not string length
    trinum = n*(n+1)//2 # note // instead of /
    n += 1
print(trinum)

第一个问题是通过使用//来解决的,/总是意味着整数除法,而不是10**6,这意味着不同的Python版本中有不同的东西。

第二个问题是通过将数字作为数字与{{1}}(即10到6次幂,即1个有6个零,或1000000)进行比较而不是将其长度作为字符串来比较来解决的6。

答案 3 :(得分:4)

进一步Malik Brahimi's answer

from itertools import *
print(next(dropwhile(lambda n: n <= 99999, accumulate(count(1))))

当然你可以争辩说,一条需要4行描述给新手的1-liner不如4-liner那样不需要任何解释。 :)

(另外,dropwhile有点难看。在Python中大多数使用它。在像Haskell这样的语言中,你可以用操作符分区而不是lambda来编写谓词,比如{{1} },这是一个不同的故事。)

答案 4 :(得分:3)

Py2.x和3.x中的除法方法不同 - 这可能就是你遇到问题的原因。 只是另一个建议 - 它不涉及分歧和长度 - 所以一般来说减少错误。另外还有添加功能。

trinum = 0
idx =0

while trinum < 99999: #largest 5 digit number
    idx += 1
    trinum += idx

print trinum

答案 5 :(得分:2)

import itertools # to get the count function
n, c = 0, itertools.count(1) # start at zero 

while n <= 99999:
    n = n + next(c)