2016-07-29 59 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