1. 程式人生 > 其它 >第15期-反轉字串

第15期-反轉字串

1 問題描述

請使用者輸入一個字串,將其進行反轉,輸出反轉後的字串
如將字串'abcde', 反轉為'edcba'

2 解題思路

字串是有序的排列,反轉字串可用for迴圈、反向切片、反轉列表、遞迴、reduce函式等方法

3 解題方法

方法一:for迴圈

a = input("請輸入字串:")
b = ''
for i in a:
    b = i + b
print(b)
View Code

第1行:用input函式獲取使用者輸入的字串,賦值給變數 a
第2行:建立變數b,賦值為一個空字串
第3行:由於字串是有序的排列,用for迴圈遍歷a中的每一個元素
第4行:每次迴圈都將迴圈變數 i 與變數 b 連線起來,再賦值給變數b,迴圈結束時,b 為 a 的反向字串
第5行:輸出變數 b

以字串'yth'為例
第一次迴圈,i = 'y', b = 'y'
第二次迴圈,i = 't', b = 't' + 'y' => 'ty'
第三次迴圈,i = 'h', b = 'h' + 'ty' =>'hty'

方法二:反向切片

a = input("請輸入字串:")
b = a[::-1]
print(b)

第1行:用input函式獲取使用者輸入的字串,賦值給變數a
第2行:建立變數b,將使用者輸入的字串轉化為字串列表
第3行:reverse() 方法反轉元素的排序順序,用reverse()方法對列表b進行反轉
第4行:用字串的join()方法遍歷列表,合併成一個字串
第5行:輸出變數c

方法四:遞迴

a = input("請輸入字串:")
def f(x):
    if len(x) <= 1:
        return x
    return f(x[1:]) + x[0]

print(f(a))
View Code

第1行:用input函式獲取使用者輸入的字串,賦值給變數a
第2行:定義函式 f,傳入引數x
第3-4行:設定遞迴演算法的結束條件,即當引數 x 的長度 小於或等於 1 時,返回值為 x
第5行:否則返回值為f(x[1:]) + x[0]
第7行:為引數 x 賦值為 a, 並輸出f(a)的結果

以字串 'abcde' 為例
對於f('abcde'), 返回值為f('bcde') + 'a'
對於f('bcde'), 返回值為f('cde') + 'b'
對於f('cde'), 返回值為f('de') + 'c'
對於f('d'), 返回值為f('e') + 'd'
對於f('e'), 返回值為 'e' (因為len(e) = 1)
所以:
f('de')為'e' + 'd' => 'ed'
f('cde')為'ed' + 'c' => 'edc'
f('bcde')為'edc' + 'b' =>'edcb'
f('abcde')為'edcb' + 'a' =>'edcba'

方法五:reduce函式

from functools import reduce
a = input("請輸入字串:")
b = reduce(lambda x, y: y + x, a)
print(b)

第1行:從functools模組中匯入reduce()函式
第2行:用input函式獲取使用者輸入的字串,賦值給變數a
第3行:呼叫reduce函式,使用lambda表示式輸出反轉字串,並賦值給變數b
第4行:輸出變數b

以字串 'abcde' 為例
x = 'a' y = 'b'; y + x => 'b' + 'a' => 'ba'
x = 'ba' y = 'c'; y + x => 'c' + 'ba' => 'cba'
x = 'cba' y = 'd'; y + x => 'd' + 'cba' => 'dcba'
x = 'dcba' y = 'e'; y + x => 'e' + 'dcba' => 'edcba'

第11期-計算階乘(opens new window)中有詳細講解reduce函式和lambda表示式,大家可以檢視哦~