核心编程第六章(上)

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 的使用次数。

转载于:https://my.oschina.net/u/2519674/blog/655096

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值