倒写单词

3 投票
3 回答
2032 浏览
提问于 2025-04-18 12:59

我知道有一些方法可以做到:

sampleword[::-1]

或者

reverse(string) 

但是我想自己写一个。我不明白为什么我的代码不行。你能帮我吗?

h=input('word\n\n');
rev(h)
def rev(h):
    counter=len(h);
    reverse="";
    while counter>0:
        reverse+=h[counter];
        counter=counter-1;
    return reverse
    #print (reverse); ?
input();

3 个回答

0

随着你对Python的使用越来越多,你会遇到一个叫“Pythonic”的概念……也就是那些很好地利用了Python特性,并且展现了良好编程风格的代码。

上面有个很好的回答,展示了如何修正你的代码,使其在Python中正常工作。但我想指出的是,这种编程风格更像是C语言的风格。有人说你可以在任何语言中写C风格的代码(在C++和C#中尤其如此),但如果你这样做了,可能就没有很好地利用语言的特性。在Python中,写这种风格的函数而忽视那些已经内置的、用C实现的、速度极快的方法,这就不是Pythonic了。

我可以保证,使用reverse(string)或者string[::-1]这两种方法都比你的rev()函数快。Python有很多内置功能,还有大量的库可以导入,提供额外的、已经调试好的功能。你可以试着找到一个好的方法来测量reverse(string)和你的rev()函数的执行时间。在Python中,有一个很好的方法可以做到这一点。

2

你的代码里有一些问题。

  1. 你在定义 rev() 之前就调用了它。
  2. 索引是从 0 开始的,所以你需要用 >= 0 而不是 > 0
  3. 你希望 counter 等于 len(h) - 1,因为索引也是从 0 开始的。
  4. 你的代码行末尾不需要分号。

这里有一个更简单、更快的方法,使用递归:

def reverse(text):
    if len(text) <= 1:
        return text
    return reverse(text[1:]) + text[0]
4

你的代码有几个问题,我在这个调整过的脚本的评论里指出来了:

def rev(h):
    counter=len(h) - 1 # indexes of h go from 0 to len(h) - 1
    reverse=""
    while counter>=0: # changed to >=0
        reverse+=h[counter]
        counter -= 1
    return reverse

h=input('word\n\n');
revers = rev(h) # put rev(h) after the definition of rev!
print(revers) # actually print the result
# deleted your last line

另外,在Python中,你不需要用;来结束每一行代码,而且你可以把counter=counter-1简化成counter -= 1

撰写回答