用python写了一个小程序(十分小),但不知道哪里错了?

s='abcde'
for i in [None]+range(-1,-len(s),-1):
print(s[:i])
代码如上。
我用的是python3.2.2,这段代码在python2.4中应该是可以用的,我知道python3.x改了不少东西,当range()这个函数具体怎么改的还真是不太清楚,但从这个程序上看,在python3.2.2中似乎range()不生成一个列表!

第1个回答  2012-01-08
虽然我好长时间没接触Python了,但是我感觉你无非就是要以一定顺序输出s中的东西。但我感觉你for循环中是不是略显麻烦了?需要用[None]+这样的语法来生成一个list吗?不是range()直接返回一个list吗?(或者可以看看xrange()之类函数,我记得能返回list).
如果是输出一个倒切片序列(每次少最前面的字母),好像不用这么麻烦。list好像有个pop函数,循环pop,然后输出剩下的就行了吧。追问

(1)python3.x中range()已经不生成一个list啦。
(2)python3.x中去掉了xrange()
(3)如果按你说的用pop(),那么list就变了。

第2个回答  2012-01-09
3.x中的range应该是生成一个类生成器对象
就是用yield返回值的那个东西,参考下面这段程序:
#---------function myrange-----------
def myrange(*args):
if len(args) == 1:
start = 0
step = 1
end = args[0]
if len(args) == 2:
start = args[0]
step = 1
end = args[1]
if len(args) == 3:
start = args[0]
setp = args[2]
end = args[1]
while start < end:
yield start
start += step

#----------你的问题可以这样解决----------
s = 'abcde'
for i in range(len(s)):
print(s[:len(s)-i])
第3个回答  2012-01-05
for i in [None] + list(range(-1,-len(s),-1)):追问

好像原来range()是直接可以生成列表的,现在range()实质返回的是什么呢?

追答

>>> x = range(0,1)
x
试一试不就知道了。其实也可以这样:
s = 'abcde'
for i in range(len(s),-1,-1):
print(s[:i])

追问

就是试过
>>>x=range(0,1)
x
后我得出结论,在python3.x中range()不再返回列表了,

本回答被提问者采纳
相似回答