我是一个完整的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并不起作用。有没有人知道发生了什么?
答案 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)
from itertools import *
print(next(dropwhile(lambda n: n <= 99999, accumulate(count(1))))
count(1)
是从1到无穷大的所有数字。accumulate(count(1))
是这些数字的所有运行总计。dropwhile(…)
正在跳过初始运行总计,直到我们达到100000,然后是其余所有。next(…)
是我们跳过的下一个。当然你可以争辩说,一条需要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)