我正在编写一个脚本,该脚本可以找到小于或等于特定值的出租车编号(数字使得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语句按照需要运行?我花了很多时间试图做一个小小的改变。
答案 0 :(得分:0)
正如@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
看起来更简单,应该做你期待的事情。
答案 1 :(得分:0)
n = sums [i]应该从if条件中取出。
for i in range(1, len(sums)-1):
if sums[i-1] != sums[i] and sums[i] == sums[i+1]:
n = sums[i]
if n<t:
idx += 1
print(n)
else:
break