我正在一个脚本中查找小于或等于特定值的出租车编号(这样的编号,即n以至少两种不同的方式表示两个多维数据集的和)。
在我的脚本中,t是我当前的变量,尝试达到可以打印的最大出租车编号,但是脚本打印的值超出了我设置的限制。
t = 10000
cubes, crev = [x**3 for x in range(1,1000)], {}
# for cube root lookup
for x,x3 in enumerate(cubes): crev[x3] = x + 1
sums = sorted(x + y for x in cubes for y in cubes if y < x)
idx = 0
n = 0
for i in range(1, len(sums)-1):
if sums[i-1] != sums[i] and sums[i] == sums[i+1]:
if n<t:
idx += 1
n = sums[i]
print "%10d"%(n)
else:
break
输出:
1729
4104
13832
设置t = 10000期望和期望的输出为:
1729
4104
有谁知道如何使if语句表现出所需的行为?我花了很多荒谬的时间来尝试进行这一小更改。
正如@BlivetWidget指出的那样,您正在检查的旧值n
,但打印的新值n
。尝试像这样更改代码。
老的:
if sums[i-1] != sums[i] and sums[i] == sums[i+1]:
if n<t:
idx += 1
n = sums[i]
print "%10d"%(n)
else:
break
新的:
if sums[i-1] != sums[i] and sums[i] == sums[i+1]:
idx += 1
n = sums[i]
if n<t:
print "%10d"%(n)
else:
break
那将是一个好的开始。然后,您可以进行一些其他更改,例如摆脱idx
不使用的值。而且您实际上也不需要n
,因为这只是另一种书写方式sums[i]
:
if sums[i-1] != sums[i] and sums[i] == sums[i+1]:
if sums[i]<t:
print "%10d"%(sums[i])
else:
break
这看起来要简单得多,并且应该按照您的期望进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句