從CSDN的趣味題學PYTHON

轉自:http://www.cnblogs.com/chagel/archive/2009/02/01/1381820.htmlhtml

本文給出兩道趣味題的Python解法
    題目1:要求算一任意長度字符串中不一樣的字符以及它的個數。
    題目2:把一段字符串用「右起豎排」的古文格式輸出。

題目難度不大,都是針對字符串的操做,邏輯比較簡單,靈活在對不一樣語言、語法的掌握程度。python

看了你們用C++、C#、Java等語言的實現,總感受牛刀殺雞太麻煩,有興趣的朋友能夠本身寫寫看或者直接看原文的網友回覆。我最近一段時間Python寫的比較多,讀到這些題目時候,就有一種躍躍欲試的衝動。由於我知道用Perl,Python,Ruby等動態語言來作這類題目,會是很是理想的。後來我作了這兩道題目,結果也使人滿意,代碼之簡潔保持在全部答案的前列。數組

先看第一題Python解答:spa

dic = {}
for s in "abcdefgabc":
    dic[s] = 1 if s not in dic else (dic[s]+1)
print '\n'.join('%s,%s' % (k, v) for k, v in dic.items())

輸出結果:code

a,2
c,2
b,2
e,1
d,1
g,1
f,1

Python的四行代碼分別作了dictionary的聲明,賦值,字符串的遍歷,以及高效拼接。htm

若是尚未看出它的簡潔和強大的話,請看第二題的解法:blog

def main(offset=6):
    string = u'
    a = [[' ']*offset for row in xrange(offset)]
    for i in xrange(offset):
        for j in xrange(offset):
            a[i][j] = string[j + i*offset]
    b = [[r[col] for r in a[::-1]] for col in xrange(len(a[0]))]
    print '\n'.join([u'┊'.join(unicode(c) for c in row)for row in b])靜夜思 李白牀前明月光,疑似地上霜。舉頭望明月,低頭思故鄉。090131'

輸出結果:ip

0┊低┊舉┊疑┊牀┊靜
9┊頭┊頭┊似┊前┊夜
0┊思┊望┊地┊明┊思
1┊故┊明┊上┊月┊
3┊鄉┊月┊霜┊光┊李
1┊。┊,┊。┊,┊白

這題若是用C#等實現,代碼要在20行以上。下面我簡單介紹一下這幾行代碼:ci

  1. 第3行,在Python裏面二維「數組」經過嵌套list來實現,這裏初始化一個6行6列的二維數組;
  2. 第7行,咱們把「矩陣」順時針旋轉了90度(行列置換,而且對置換後的行首尾對調-這裏的::-1就是用來置換一個list的trick);
  3. 最後一行,咱們把數組裏的每行中元素,每行之間分別用兩個不一樣字符拼接起來。join方法以及for..in..語句在python中是至關常見的用法。

經過這兩題,咱們看到Python在處理字符串時候的十分靈活方便,雖然一種語言的好壞不該徹底靠是否簡潔來衡量,但對於我我的而言,Python是目前我用過的最好的語言。並且對於趣味題來講,這不就是咱們解題的趣味所在嗎?unicode

相關文章
相關標籤/搜索