Vic*_*tor 20 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)
Run Code Online (Sandbox Code Playgroud)
它只能在我安装在计算机上的python中工作,如果我说while len(str(trinum)) < 8:但它应该是while len(str(trinum)) < 6:.所以我去http://www.skulpt.org/并在那里运行我的代码,它给了我正确的答案,while len(str(trinum)) < 6: 就像它应该的那样.但它与我在我的计算机上安装的python不兼容6.有谁知道发生了什么事?
Bil*_*nch 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.这将使你的条件成立.
在Python 2中,/运算符在可能的情况下执行整数除法:"x除以y是余数b",丢弃"b"(使用%运算符查找"b").在Python 3中,/运算符总是执行浮点除法:"x除以y是a.fgh".使用//运算符在Python 3中获取整数除法.
你在这里遇到两个问题,它们会给你错误的答案.
第一个问题是你正在使用/,这意味着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)
Run Code Online (Sandbox Code Playgroud)
第一个问题是使用修复//,它总是意味着整数除法,而不是/,这意味着不同的Python版本中的不同的东西.
第二个问题是通过将数字作为数字10**6(即10到6次幂,即1个有6个零,或1000000)进行比较而不是将其长度作为字符串与6进行比较来解决的.