我正在对Project Euler进行挑战,以便在python上做得更好(我是初学者),我正在尝试Problem 9。
vara = lista[-1]
varb = listb[-1]
varc = listc[-1]
while not(vara < varb < varc):
listb.pop(-1)
lista.pop(-1)
lista.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
print vara, varb, varc
else:
listc.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
print vara, varb, varc
else:
listb.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
print vara, varb, varc
else:
lista.pop(-1)
我尝试过很多方法让lista / listb / listc的值为1 - 1000,但它们似乎都没有真正起作用
lista = range(1, 1000)
lista = range[1, 1000]
等 任何帮助将不胜感激,谢谢:)
答案 0 :(得分:4)
要生成1到1000之间的值,您需要将结束值指定为1000 + 1 ,即1001.所以
liasta = range(1, 1001)
将为您提供1到1000之间的值列表。
range()使用半闭区间,这意味着 包含 它生成的值列表中的第一个值,但 排除 最后一个。请注意,如果您未指定起始值,range()
将默认为0
。您还可以指定增量值,默认为1
,除非另有说明。
doc page中的三个例子:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
答案 1 :(得分:1)
将此用于您的代码:
lista = range(1, 1001)
listb = list(lista)
listc = list(lista)
不要这样做:
lista = listb = listc = range(1, 1001)
因为那时你的pop
都在同一个列表上工作。
答案 2 :(得分:0)
虽然您的问题询问如何列出某个范围内的数字列表,但我想问你一个问题:
你真的需要三个数字列表,或者你只需要 看通过解决方案的可能值?
我问,因为虽然你可以得到你所寻求的答案,但最好的表达方式不如你前进。例如:
for c in range(1, 1001):
for b in range(1, c):
for a in range(1, b):
if is_pythagorean_triple(a, b, c):
...
def is__pythagorean_triple(a, b, c):
...
不会创建任何列表(至少没有你需要考虑的列表)。另一个问题是a
为何只能达到b
?