chapter 6 exercises

6–1. 字符串.string 模塊中是否有一種字符串方法或者函數能夠幫我鑑定一下一個字符串
是不是另外一個大字符串的一部分?
yes,string.find()

  檢測str 是否包含在string 中,若是beg 和end 指定範圍,
則檢查是否包含在指定範圍內,若是是返回開始的索引值,不然
返回-1 算法

6–3. 排序
(a) 輸入一串數字,從大到小排列之.
(b) 跟a 同樣,不過要用字典序從大到小排列之. app

(a)
list1=[]
while True:
   n=int(raw_input('please input numbers:'))
    ifn==0:
       break
   list1.append(n)
    printlist1
   list1.sort()
   list1.reverse()
    printlist1 dom

(b):
list1=[]
while True:
   n=int(raw_input('please input numbers:'))
    ifn==0:
       break
   list1.append(n)
    printlist1
   list1.sort()
   list1.reverse()
    printlist1 函數

6–5. 字符串
(a)更新你在練習2-7 裏面的方案,使之能夠每次向前向後都顯示一個字符串的一個字符.
(b)經過掃描來判斷兩個字符串是否匹配(不能使用比較操做符或者cmp()內建函數)。附加題:
在你的方案里加入大小寫區分.
(c)判斷一個字符串是否重現(後面跟前面的一致).附加題:在處理除了嚴格的迴文以外,加入對
例如控制符號和空格的支持。
(d)接受一個字符,在其後面加一個反向的拷貝,構成一個迴文字符串. ui

(a):
a=raw_input('please input string:')
for i in range(len(a)):
    printa[i],a[len(a)-1-i]
(b):
string1=raw_input('please input string1:')
string2=raw_input('please input string2:')
if len(string1)!=len(string2):
    print '%sand %s is not the same,scenario 1'%(string1,string2)
else:
   t=len(string1)
    for i inrange(t):
       if string1[i]!=string2[i]:
           print  '%s and %s is not the same,scenario2'%(string1,string2)
           break
    else:
       print  '%s and %s is thesame'%(string1,string2)
(c):
import sys this

def isdouble(string):
   a=len(string)
    ifa%2!=0:
       print 'this is not a palindorom 1'
    else:
       for i in range(a):
           if string[i]!=string[(a-1-i)]:
               print 'this is not a palindorom2'
               sys.exit() spa

       else:
           print 'this is a palindorom'
            
if __name__=='__main__':
   string=raw_input('please input string:')
   isdouble(string) 設計

(d):
def ispalindorome(string):
   e=list(string)
   b=list(string)
   b.reverse() 調試

   e.extend(b)
   f=''.join(e)
    return f code


if __name__=='__main__':
   a=raw_input('please input string:')
    c=ispalindorome(a)
    print c

6–6. 字符串.建立一個string.strip()的替代函數:接受一個字符串,去掉它前面和後面的
空格(若是使用string.*strip()函數那本練習就沒有意義了)

str=raw_input('please input string:')

print str

i=0
j=len(str)-1

while str[i]==' ':
    i=i+1

while str[j]==' ':
    j=j-1

str=str[i:j+1]
print str

6–8. 列表.給出一個整數值,返回表明該值的英文,好比輸入89 返回"eight-nine"。附加題:
可以返回符合英文語法規則的形式,好比輸入「89」返回「eighty-nine」。本練習中的值限定在家0
到1,000.
code: 始終以爲這個code很彆扭,不知道哪位大神有好的辦法,還望賜教啊。
dict1 ={"1":"one","2":"two","3":"three","4":"four","5":"five",
        "6":"six","7":"seven","8":"eight","9":"nine","0":"",}
dict22=

{'1':'eleven','2':'eleven','3':'thirteen','4':'forteen','5':'fifteen','6':'sixteen','7':'seventeen','8':'eighteen','9':'ninteen'}
dict2 ={'1':'ten',"2":"twenty","3":"thirty","4":"fourty","5":"fifty",
        "6":"sixty","7":"seventy","8":"eighty","9":"ninety","0":""}
dict3 = {"1":"one hundred","2":"two hundred","3":"threehundred","4":"four hundred","5":"five hundred",
        "6":"six hundred","7":"seven hundred","8":"eight hundred","9":"ninehundred","0":""}
dictAll = {1:dict1, 2:dict2, 3:dict3}
def fun1(strNum):
    ifint(strNum)<=1000and int(strNum)>0:
       length=len(strNum)
       if length==4:
           return 'one thousand'
       strTemp=''
       if length==2 and int(strNum[0])==1:
           strTemp=dict22[strNum[1]]
           return strTemp
       if length==3 and int(strNum[1])==1:
           strTemp=dict3[strNum[0]]+' '+dict22[strNum[1]]
           return strTemp
       for i in range(length):

           strTemp=strTemp+dictAll[length-i][strNum[i]]+' '
       return strTemp

if __name__=='__main__':
    whileTrue:
       strNum=raw_input('please input num(q to quilt):')
       if strNum.lower() == 'q':
           break
       print 'the num is :%s'%(fun1(strNum))


6–9. 轉換.爲練習5-13 寫一個姊妹函數, 接受分鐘數, 返回小時數和分鐘數. 總時間不
變,而且要求小時數儘量大.

def count(timestr):
   time=int(timestr)
   b=divmod(time,60)

   return  '%d:%d'%(b[0],b[1])

if __name__=='__main__':
    whileTrue:

       timestr1=raw_input('please input time(q to quit):')
       if timestr1[0].lower()=='q':
           break
       print 'the time is %s'%(count(timestr1))

6–10.字符串.寫一個函數,返回一個跟輸入字符串類似的字符串,要求字符串的大小寫反轉.
好比,輸入"Mr.Ed",應該返回"mR.eD"做爲輸出.

code:
import string

def reverse(str):
    length=len(str)
    list=[]
    for i in range(length):
       if str[i] in string.lowercase:
           list.append(str[i].upper())
       elif str[i] in string.uppercase:
           list.append(str[i].lower())
       else:
           list.append(str[i])
    string1=''.join(list)
    return string1

if __name__=='__main__':
    whileTrue:
       string2=raw_input('please input string(q to quit):')
       if string2[0].lower()=='q':
           break
       print 'the reverse string is %s'%(reverse(string2))

6–7. 調試.看一下在例6.5 中給出的代碼(buggy.py)
(a)研究這段代碼並描述這段代碼想作什麼.在全部的(#)處都要填寫你的註釋.
(b)這個程序有一個很大的問題,好比輸入6,12,20,30,等它會死掉,實際上它不能處理任何的偶
數,找出緣由.
(c)修正(b)中提出的問題.

#input a number
num_str = raw_input('Enter a number: ')

#conversion string to int
num_num=int(num_str)

#get a range
fac_list = range(1, num_num+1)
print "BEFORE:",fac_list

#
i = 0

list1=[]
while i < len(fac_list):

    ifnum_num % fac_list[i] != 0:
       list1.append(fac_list[i])

 #
    i = i +1

# print string which has been mofidied
print "AFTER:",list1


6–11.轉換
(a)建立一個從整數到IP 地址的轉換程序,以下格式: WWW.XXX.YYY.ZZZ.
(b)更新你的程序,使之能夠逆轉換.

code:
暫時不明白什麼意思呢

6–12.字符串
(a)建立一個名字爲findchr()的函數,函數聲明以下:
def findchr(string, char)
findchr()要在字符串string 中查找字符char,找到就返回該值的索引,不然返回-1.不能用
string.*find()或者string.*index()函數和方法
(b)建立另外一個叫rfindchr()的函數,查找字符char 最後一次出現的位置.它跟findchr()工做
相似,不過它是從字符串的最後開始向前查找的.
(c)建立第三個函數,名字叫subchr(),聲明以下:
def subchr(string, origchar, newchar)
subchr()跟findchr()相似,不一樣的是,若是找到匹配的字符就用新的字符替換原先字符.返回
修改後的字符串.
(a):

def findchr(string, char):
   length=len(string)
    for i inrange(length):
       if char==string[i]:
           return i

   else:
       return -1

if __name__=='__main__':
    whileTrue:

       string=raw_input('please input string(q to quit):')

       if string[0].lower()=='q':
           break
       char=raw_input('please input char:')
       print 'the index is:%d'%(findchr(string,char))
(b):

def findchr(string, char):
   length=len(string)
    for i inrange(length):

       if char==string[-i-1]:
           j=length-i-1
           return j

   else:
       return -1

if __name__=='__main__':
    whileTrue:

       string=raw_input('please input string(q to quit):')

       if string[0].lower()=='q':
           break
       char=raw_input('please input char:')
       print 'the index is:%d'%(findchr(string,char))

(c):

6–13.字符串.string 模塊包含三個函數,atoi(),atol(),和atof(),它們分別負責把字符串轉
換成整數,長整型,和浮點型數字.從Python1.5 起,Python的內建函數int(),long(),float()也能夠
作相同的事了, complex()函數能夠把字符串轉換成複數.(然而1,5 以前,這些轉換函數只能工做於
數字之上)

6–14.隨機數.設計一個"石頭,剪子,布"遊戲,有時又叫"Rochambeau",你小時候可能玩過,下面
是規則.你和你的對手,在同一時間作出特定的手勢,必須是下面一種手勢:石頭,剪子,布.勝利者從
下面的規則中產生,這個規則自己是個悖論.
(a) the paper covers the rock,
布包石頭.
(b)石頭砸剪子,
(c)剪子剪破布.在你的計算機版本中,用戶輸入她/他的選項,計算機找一個隨機選項,而後由你
的程序來決定一個勝利者或者平手.注意:最好的算法是儘可能少的使用if 語句.

CODE:
from random import choice

def Rochambeau(gestureYou):

   list1=['P','R','S']
   win=['PR','RS','SP']

   gestureCom=choice(list1)
    printgestureCom

    ifgestureYou+gestureCom in win:
       return 'you win'
    elifgestureYou==gestureCom:
       return 'flat'
    else:
       return 'you lose'


if __name__=='__main__':
    whileTrue:
       gestureYou=raw_input('please input you choice(q to quit):')
       if gestureYou[0].lower()=='q':
           break

       print 'the result is %s'%(Rochambeau(gestureYou))


6–15.轉換
(a)給出兩個可識別格式的日期,好比 MM/DD/YY 或者 DD/MM/YY 格式,計算出兩個日期間的天
數.
(b)給出一我的的生日,計算今後人出生到如今的天數,包括全部的閏月.
(c)仍是上面的例子,計算出到此人下次過生日還有多少天.

i hate the program about date or month or Leap month , so justignore this one. yeah!!!

6–16.矩陣.處理矩陣M 和N 的加和乘操做.

6–17.方法.實現一個叫myPop()的函數,功能相似於列表的pop()方法,用一個列表做爲輸入,
移除列表的最新一個元素,並返回它.

def myPop(list1):

    for i inrange(len(list1)):
       b=list1[len(list1)-1]
       list1.remove(list1[len(list1)-1])
       print b

if __name__=='__main__':
    whileTrue:
       list2=list(raw_input('pls input a list(q to quit):'))
       if len(list2)==1:
           break
       print 'list shows like this:',myPop(list2)

question: how to remove the fun result:None?

6–18. zip() 內建函數 在6.13.2節裏面關於zip()函數的例子中,zip(fn,ln)返回的是什麼?
zip(fn,ln),返回fn,和ln中各元素的結合(一個元組)後生成的一個新的列表,若是fn和ln中元素個數不同,就舍掉多餘的元素。

6–19.多列輸出.有任意項的序列或者其餘容器,把它們等距離分列顯示.由調用者提供數據和 輸出格式.例如,若是你傳入100 個項並定義3 列輸出,按照須要的模式顯示這些數據.這種狀況下,應 該是兩列顯示33 個項,最後一列顯示34 個.你可讓用戶來選擇水平排序或者垂直排序.

相關文章
相關標籤/搜索