如何修复Python If语句查找出租车号码?

2024-07-03 07:38:08 发布

您现在位置: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语句按所需的方式运行吗?我花了很长时间来做这个小小的改变。。你知道吗


Tags: in脚本forif方式range号码cube
2条回答

正如@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

这看起来简单多了,应该能达到你的期望。你知道吗

n=应从if条件中取出总和[i]。你知道吗

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

相关问题 更多 >