如何修复Python如果声明用于查找出租车编号?

时间:2015-10-12 02:11:25

标签: python

我正在编写一个脚本,该脚本可以找到小于或等于特定值的出租车编号(数字使得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语句按照需要运行?我花了很多时间试图做一个小小的改变。

2 个答案:

答案 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