檢測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,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!=string2
:
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!=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+1
while str==' ':
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]
return strTemp
if length==3 and int(strNum)==1:
strTemp=dict3[strNum[0]]+' '+dict22[strNum]
return strTemp
for i in range(length):
strTemp=strTemp+dictAll[length-i][strNum]+' '
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)
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 in string.lowercase:
list.append(str.upper())
elif str in string.uppercase:
list.append(str.lower())
else:
list.append(str)
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 != 0:
list1.append(fac_list)
#
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:
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 個.你可讓用戶來選擇水平排序或者垂直排序.