2016-12-25 102 views
2

我被困在一个练习中,我只需要在一个函数中使用一个循环来反转随机字符串(for循环或while?)。使用循环在Python中反转字符串?

我不能在这里使用".join(reversed(string))string[::-1]方法,所以它有点棘手。

我的代码看起来是这样的:

def reverse(text): 
    while len(text) > 0: 
     print text[(len(text)) - 1], 
     del(text[(len(text)) - 1] 

我用,打印出每一个字母文字在同一行!

我得到del(text[(len(text)) - 1]

任何建议无效的语法?

+0

你试图扭转字符串或以相反的顺序打印字符?你的头衔暗示着前者,但你的代码似乎试图去做后者。如果你想扭转字符串 - 建立它,然后*返回*反向字符串。让调用代码打印它,如果需要的话。大多数函数不应该在其中打印。 –

+0

您可以使用临时变量来构建反向字符串,而不是操纵原始字符串 –

+0

'del'修改对象,但不能修改字符串,而必须创建新字符串。尝试用少一个字符创建一个新字符串:'text = text [: - 1]' – Duncan

回答

2

的问题是,你不能在python字符串中使用del。 但是这个代码不工作德尔,并希望做的伎俩:

def reverse(text): 
    a = "" 
    for i in range(1, len(text) + 1): 
     a += text[len(text) - i] 
    return a 

print(reverse("Hello World!")) # prints: !dlroW olleH 
+0

好吧,我明白,但我不明白的len(文本)+ 1 –

+0

为什么你使用+ 1我迭代? –

+0

@DanielBäck这只是因为python错过了反向词的最后一个字母。为了解决这个问题,我只添加了一个,以便它再次循环并添加最后一个字母。 –

4

Python字符串不可变,因此您不能使用del语句删除适当的字符。然而,你可以同时通过原来的一个循环,建立一个新的字符串:

def reverse(text): 
    rev_text = "" 
    for char in text: 
     rev_text = char + rev_text 
    return rev_text 

reverse("hello") 
# 'olleh' 
+0

我不太确定一个完整的答案会像提示一样有益于OP。 –

+0

@JacobVlijm的[:: - 1]'是唯一有利于没有做家庭作业的人的答案。无论如何 - 这肯定是重复的。 –

1

Python中的字符串是不可改变的。你不能在字符串上使用del。

text = 'abcde' 
length = len(text) 
text_rev = "" 
while length>0: 
    text_rev += text[length-1] 
    length = length-1 

print text_rev 

希望这会有所帮助。

+0

是的,它很酷,你也可以使用一个while循环, –

+0

这一个似乎比使用for循环更容易 –

+0

@DanielBäck如果你喜欢它,你可以upvote我的解决方案。这有助于那些正在寻找像你一样的答案的人。 – Teja

0

这是我使用装饰器和for循环的尝试。把所有内容放在一个文件中

实现细节:

def reverse(func): 
    def reverse_engine(items): 
     partial_items = [] 
     for item in items: 
      partial_items = [item] + partial_items 
     return func(partial_items) 
    return reverse_engine 

用法:

实施例1:

@reverse 
def echo_alphabets(word): 
    return ''.join(word) 

echo_alphabets('hello') 
# olleh 

实施例2:

@reverse 
def echo_words(words): 
    return words 

echo_words([':)', '3.6.0', 'Python', 'Hello']) 
# ['Hello', 'Python', '3.6.0', ':)'] 

例3:

@reverse 
def reverse_and_square(numbers): 
    return list(
     map(lambda number: number ** 2, numbers) 
    ) 

reverse_and_square(range(1, 6)) 
# [25, 16, 9, 4, 1]