2017-06-16 70 views
0

我正在试着制作一个程序,用于反向输入输入的单词。我终于开始工作了,但我不明白它为什么起作用。这里是工作程序:Python中的范围长度

def reverse(text): 
    length = len(text) 
    text = list(text) 
    new = ["None"] * length 
    for i in range(0, length): 
     new[i] = text[length - i - 1] 
    return "".join(new) 
return new 

不应该做irange(0, length)是一个字符长度超过原词?防爆。如果原始单词是四个字符,range(0, length)将是五个​​字符,不是吗?看起来像范围应该是(0, length - 1),但没有奏效!有人能解释为什么吗?

+3

你没有打印范围(5)来测试你的理论吗? –

+0

它不会,范围给你0,...,长度-1 – MaLiN2223

+0

范围的结束是独家 –

回答

2

Python范围去,直到它到达,当它停止时。

编写范围作为一个for循环是这样的:

for i in range(a, b, c): 

for (int i = a; i < b; i += c) { 

所以它不包括终点。请注意0​​表示它不包括b。你可能会想到它作为<=

而且,在这种情况下,你可以使用内置的逆转,或由[::-1]片(从结束到开始,一个字符每次回去。)

还要注意的是range(0, x)相当于range(x),

0

一旦达到length循环结束。例如

str1 = "hello" 
length = len(str1) #length = 5 
for i in range(0,length) # will loop from 0 to 4. 
    print(length) 

输出:

0 
1 
2 
3 
4 
的例子

,循环将1小于长度

0

我相信你正在学习Python的运行(我也是,并且已经为超过20年了 - 总是有更多的东西要学习!)首先祝贺你自己制作的代码可行!

如果您使用了字符串切片,那么您可能知道x[:]会创建一个新副本x(字符串,列表和元组都被视为序列),它们包含完全相同的元素。你甚至可能知道你可以使用“步幅”作为切片的第三个元素。

你可能会不是知道是使用步幅-1将向后遍历元素。所以你reverse功能的较短的版本可能会读

def reverse(x): 
    return x[::-1] 

这是不寻常的新Python用户发现做的事情,他们一直在做低效内置到语言是有效的方法,所以认为这不是一个批评你的代码,但有可能改进的建议。