倒写单词
我知道有一些方法可以做到:
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
你的代码里有一些问题。
- 你在定义
rev()
之前就调用了它。 - 索引是从
0
开始的,所以你需要用>= 0
而不是> 0
。 - 你希望
counter
等于len(h) - 1
,因为索引也是从0
开始的。 - 你的代码行末尾不需要分号。
这里有一个更简单、更快的方法,使用递归:
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
。