2016-12-25 65 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]