2016-07-29 61 views
0

在我的程序中,用戶輸入一個將經過的數字(input_n):
0 + 1 + 2 + ... + n = n *(n +1)/ 2公理。.join使用Python中的範圍生成列表的元素

我的期望輸出用於input_n < = 10(在這種情況下:5)

我的期望輸出用於input_n> 10(在這種情況下:999)

[0, 1, 2, 3, 4, 5, ... , 995 , 996, 997, 998, 999] 
0 + 1 + 2 + 3 + 4 + 5 + ... + 995 + 996 + 997 + 998 + 999 = 499500 
999*(999+1)/2 = 499500 

我我認爲我可以在打印語句中使用兩個帶有「+ ... +」字符串的範圍函數。 但是我打字,因爲我得到一個語法錯誤,必須是沒有意義的:

SyntaxError: Generator expression must be parenthesized if not sole argument 

是什麼錯誤呢?我得到這個表達式必須加上括號。我試圖用我的初學者的邏輯來糾正錯誤,但我的嘗試失敗了。

這裏是我的代碼:

input_n = int(input("Choisissez un nombre : ")) 

input_list = list() 
for i in range(0,input_n+1): 
    input_list.append(i) 

if input_n <= 10: 
    print ("+".join(str(i) for i in input_list) + " = ", sum(input_list)) 
    print (str(input_n)+'*'+'('+str(input_n)+'+1)/2 = ', int(input_n*(input_n+1)/2)) 
elif input_n > 10: 
    print("+".join(str(i) for i in range(5)) + " + ... +" + "+".join(str(i) for i in range(input_n-5,input_n+1), sum(input_list))) 
    print (str(input_n)+'*'+'('+str(input_n)+'+1)/2 = ', int(input_n*(input_n+1)/2)) 

對於菜鳥,像我這樣的: 我已經得到了以前遇到的問題的答案在此topic,你應該definetly檢查給出的答案。

+0

你能不能爲空字符串開始,串接每個迭代,然後打印出最終結果? – Pedro

+0

我不明白你爲什麼要寫'print('+'。join(...)+'=',sum(...))'而不是'print('+'。join(... ),'=',sum(...))'。要麼你首先連接字符串並將最終結果傳遞給'print'或者使用'print'的多個參數。混合兩者並不是真的有意義,特別是在這種情況下。 – Bakuriu

+0

謝謝。我一定會牢記這一點。所有格式,無論是適當的還是馬戲團式的,對我來說都是同樣新穎的。一旦我更好地掌握了基本知識,我願意在編碼時獲得一些順序。 – randomhopeful

回答

1

你忘了關join內置方法的支架,所以我想這是你想要什麼:

>>> input_list = list(range(21)) 
>>> 
>>> input_n = 20 
>>> print("+".join(str(i) for i in range(5)) + " + ... +" + "+".join(str(i) for i in range(input_n-5,input_n+1)) + ' = ', sum(input_list)) 
0+1+2+3+4 + ... +15+16+17+18+19+20 = 210 
+0

謝謝你,你從一個瘋狂的方向把我帶回了我,我仍然花了十分鐘的時間來弄清楚我有正確數目的括號,但是其中有一個以滑稽的方式錯位。我很感激我其實並沒有得到低估。 – randomhopeful

+0

@randomhopeful ..當然;) –

3

回溯正顯示出你這樣的:

....join(str(i) for i in range(input_n-5,input_n+1), sum(input_list))) 

什麼寫在這裏是沒有意義的。修改它直到它。

+0

我明白了;在這種情況下:sum(input_list)必須被解釋爲第二個範圍。我將嘗試添加一個字符串並使用{} .format函數 – randomhopeful

+1

不作爲第二範圍,而是作爲元組的第二個元素(結果爲「range()」作爲第一個)*或* as join()'的第二個參數。詞法分析人員認定這樣的模棱兩可的情況是錯誤的。 –

+0

謝謝。另一個答案得到了我通過我的頭做錯了。你們解釋了詞法分析員不得不忍受的胡言亂語。 – randomhopeful