6-2
import string
import keyword
alphas = string.letters + '_'
nums = string.digits
myInput = raw_input("Identifier to test: ")
folwords = alphas+nums
if myInput[0] not in alphas:#first word
print 'invalid: first symbol must be'
print 'alphabetic'
else:
if len(myInput)>1:
if myInput in keyword.kwlist:# keyword
print "wrong!"
else:
for otherChar in myInput[1:]:#following words
if otherChar not in folwords:
print 'invalid: remaining'
print 'symbols must be alphabetic'
break
else:
print "Okay as an identifier."
else:
print "Okay as an identifier."
6-3
num = raw_input("input numbers like 1234: ")
dnum = [int(i) for i in num]
snum = [i for i in num]
dnum.sort(reverse=True)
snum.sort(reverse=True)
print dnum,snum
6-4
Grades = raw_input("your grades: ").split(',')
print "students' grades".title().center(20)
print '-'*20
s=0;n=0
for i in Grades:
x = float(i)
if x>=90 :
print '{0:>6.2f}{1:>14}'.format(x, 'A')
elif x>=80 and x<=89:
print '{0:>6.2f}{1:>14}'.format(x, 'B')
elif x>=70 and x<=79:
print '{0:>6.2f}{1:>14}'.format(x, 'C')
elif x>=60 and x<=69:
print '{0:>6.2f}{1:>14}'.format(x, 'D')
else:
print '{0:>6.2f}{1:>14}'.format(x, 'F')
n+=1
s=s+x
print '-'*20
print '{0}{1:>13.2f}'.format('average',s/n)
s.format( )是比%更高级的字符串格式化形式,使用它格式化字符串会更加得心应手。
6-5(c)
fstr = raw_input('your first string: ')
tstr = raw_input('your string to find: ')
Lindex = fstr.find(tstr)
Rindex = fstr.rfind(tstr)
if Lindex == -1:
print 'do not have this string'
else:
if Lindex == Rindex:
print '%s have only one %s' % (fstr, tstr)
else:
print '%s have more than one %s' % (fstr, tstr)
不太懂题的意思,这段代码用于判断一个字符串是否在另一个字符串中出现了一次或一次以上。
6-5(d)
astr = raw_input('your string: ')
print astr + astr[::-1]
字符串逆序用步长值会很简便。
6-6
def Mystrip(string):
newstr = '';i = 0
if loop(0, string) != 0:
i = loop(0, string)
while i <= len(string):
if loop(i, string) == 'alzero':
break
newstr += string[i]
i += 1
return newstr
def loop(i, string):
for j in range(i, len(string)):
if string[j] != ' ':
return j
else:
return 'alzero'
print Mystrip(raw_input('your string: '))+'done'
6-7
# input a stringtype number
num_str = raw_input('Enter a number: ')
# convert num_str to inttype
num_num = int(num_str)
# build a list
fac_list = range(1, num_num+1)
print "BEFORE:", fac_list
# set i equal to 0
i = 0
# create a loop
while i<len(fac_list):
# num_num/1,num/2...num/num
if num_num % fac_list[i] == 0:
del fac_list[i]
else:
# i add 1
i+=1
# print the list
print "AFTER:", fac_list
在原例中,列表中符合条件的元素被删除,此时下一个元素就会占据被删除元素的位置,但索引值 i 又加了 1 ,因此下次索引
会跳过这个顶替上来的新元素,解决方法是如果删除了元素, i 就不变,没有删除的话,i 值加 1 。
6-8
str_num = raw_input("your number:")
units = {'0':'zero','1':'one','2':'two',
'3':'three','4':'four','5':'five','6':'six',
'7':'seven','8':'eight','9':'nine'}
decs = {'10':'ten','11':'eleven','12':'twelve',
'13':'thirteen','14':'fourteen','15':'fifteen',
'16':'sixteen','17':'seventeen','18':'eighteen',
'19':'nineteen','20':'twenty','2':'twenty',
'3':'thirty','4':'forty','5':'fifty','6':'sixty',
'7':'seventy','8':'eighty','9':'ninety'}
def unit(num):
return units[num]
def dec(num):
if num[0]=='1':
return decs[num]
else:
return decs[num[0]]+'-'+units[num[1]]
def hun(num):
if num[1]=='0':
return units[num[0]]+' hundred and '+units[num[2]]
else:
return units[num[0]]+' hundred and '+dec(num[1:])
leng=len(str_num)
if leng==1:
print unit(str_num)
elif leng==2:
print dec(str_num)
elif leng==3:
print hun(str_num)
else:
print 'one thousand'
6-9
minu = int(raw_input("minutes:"))
hours, minutes=divmod(minu,60)
print hours,'hours',minutes,'minutes'
6-12(a)
def findchr(string, char):
clength = len(char)
slength = len(string)
list = []; m = 0; d = clength
times = slength - 1
for i in range(times):
list.append(string[m:d])
m += 1
d += 1
for p,q in enumerate(list):
if q == char:
return p,list
print findchr('abcdefg', 'cd')
6-12(b)
def findchr(string, char):
clength = len(char)
slength = len(string)
list = []; m = 0; d = clength
times = slength - 1
for i in range(times):
list.append(string[m:d])
m += 1
d += 1
for i in range(-1,-slength,-1):
if list[i] == char:
return i + times
else:
return "'string' has not 'char'"
print findchr('abcdecd', 'cd')
6-12(c)
def findchr(string, char, newchar):
clength = len(char)
slength = len(string)
list = []; m = 0; d = clength
times = slength - 1
for i in range(times):
list.append(string[m:d])
m += 1
d += 1
for p,q in enumerate(list):
if q == char:
return string[:p] + newchar + \
string[p+clength:]
print findchr('abcdefg', 'cd', 'rt')
6-12 的方法是创建一个列表,可以减少 if 的使用次数。