第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表示式,大家可以檢視哦~