和大家分享自己完成的《Python核心編程》習題答案。
因為不是來自官方資源,是自己的的練習,可能有誤或者並非最好的解決辦法。
【推薦】推薦博文:牛B的Python模組
http://www.cnblogs.com/chu888chu888/archive/2011/01/09/1931084.html
【推薦】推薦博文:Python核心編程練習第六章,別人做的練習
http://blog.csdn.net/killua_hzl/archive/2010/05/31/5637828.aspx
【推薦】推薦博文:全排列演算法之字典序法
http://blog.sina.com.cn/s/blog_4c471b9601000czy.html
【推薦】部落格:異そ度︶空ツ間,關於Python的學習
http://blog.csdn.net/killua_hzl/category/681280.aspx
6-1.
字串。string模組中是否有一種字串方法或者函數可以幫我評鑑下一個字串是否是另一個大字串的一部分?
【答案】
成員操作符用於判斷一個字元或者一個字串(中的字元)是否出現在另一個字串中。出現則返回True,否者返回False。注意,成員操作符不是用來判斷一個字串是否包含另一個字串的,這樣的功能由find(),index(),rfind()和rindex()函數來完成。
>>> 'bc' in 'abcd'
True
>>> 'n' in 'abcd'
False
6-2.
字串標識符。修改例6-1的idcheck.py指令碼,使之可以檢測長度為一的標識符,並且可以識別Python關鍵字。對後一個要求,你可以使用keyword模組(特別是keyword.kwlist)來輔助。
【評】
我懷疑題目的原意是修改指令碼後使之可以檢測長度大於等於一的標識符。
【參考】
idcheck.py指令碼
import string
alphas = string.letters + '_'
nums = string.digits
print 'Welcome to the Identifier Checker v1.0'
print 'Testees must be at least 2 chars long.'
myInput = raw_input('Identifier to test?')
if len(myInput) > 1:
if myInput[0] not in alphas:
print '''invalid: first symbol must be alphabetic'''
else:
for otherChar in myInput[1:]:
if otherChar not in alphas + nums:
print '''invalid: first symbol must be alphabetic'''
break
else:
print 'okay as an identifier'
【參考】關於keyword.kwlist
>>> import keyword
>>> dir(keyword)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', 'iskeyword', 'kwlist', 'main']
>>> keyword.kwlist
['and', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'yield']
>>>
【答案】
代碼如下:
import string
import keyword
alphas = string.letters + '_'
nums = string.digits
print 'Welcome to the Identifier Checker v2.0'
print 'Testees must be at least 1 chars long.'
myInput = raw_input('Identifier to test? ')
isKeyword = False
isIdentifier = False
if len(myInput) >= 1:
if myInput[0] not in alphas:
print '''invalid: first symbol must be alphabetic'''
isIdentifier = False
else:
for otherChar in myInput[1:]:
if otherChar not in alphas + nums:
print '''invalid: remaining symbols must be alphabetic'''
isIdentifier = False
break
else:
isIdentifier = True
if myInput in keyword.kwlist:
print '"%s" is a keyword of Python' % myInput
isKeyword = True
if isIdentifier and (not isKeyword): print 'okay as an identifier'
6-3.
排序。
(a)輸入一串數字、並從大到小排列之。
(b)跟a一樣。不過要用字典序從大到小排列。
【答案】
(a)代碼如下:
aList = raw_input('Please input numbers, separated by space ... ')
bList = []
for i in aList.split(' '):
bList.append(int(i))
bList.sort()
print bList[::-1]
(b)代碼如下:
aList = raw_input('Please input numbers, separated by space ... ')
bList = []
for i in aList.split(' '):
bList.append(i)
bList.sort()
print bList[::-1]
【評】
我查了字典序的具體意思,好像和題目的意思並不相符。
關鍵詞:Pyhon核心編程習題代碼 非官方 部落格園