나는 택시 번호 (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] 삭제
몇 마디 만하겠습니다