2012-07-23 83 views
1

我正在做項目歐拉的挑戰,以獲得更好的Python(我是一個初學者),我正在嘗試做Problem 9作爲一個列表變量存儲範圍()的結果 - Python

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] 

等 任何幫助將不勝感激,謝謝:)

+4

Protip:爲變量使用有意義的名稱。 – 2012-07-23 21:01:55

回答

3

要生成值從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] 
+0

它給出了錯誤 回溯(最近通話最後一個): 文件 「euler9.py」,10號線,在 lista.pop(-1) IndexError:從空列表彈出:/ – cjm 2012-07-23 21:05:09

+0

@ c3ns0r3d你做這些在'while'循環之前調用'lista = range(1,1001)'等等?如果按照我在答案中顯示的方式創建「lista」,則可以毫無問題地確保「lista.pop(-1)」。 – Levon 2012-07-23 21:07:03

+0

是的,他們與文件頂部的變量 – cjm 2012-07-23 21:08:49

1

使用此爲您的代碼:

lista = range(1, 1001) 
listb = list(lista) 
listc = list(lista) 

不要這樣做:

lista = listb = listc = range(1, 1001) 

因爲如果你的pop一切都工作在相同的列表。

0

雖然你的問題是問如何在一個範圍內的數字列表,我想請教您一個問題回:

Do you actually need three lists of numbers or do you just need to look through the possible values for a solution?

我問,因爲儘管你可以得到你尋找答案,它不是最好的表達你的方式。例如:

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

+0

優雅!如果我有足夠的代表upvote,我會:) – cjm 2012-07-23 22:08:37