6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你.
import string
import keyword
alphas=string.letters+'_'
num=string.digits
aplpnums=alphas+num
print 'Testees must be at least 1 char 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 aplpnums:
print 'invalid: remaining symbols must be alphanumeric'
break
else:
if myinput in keyword.kwlist:
print 'invalid: symbol is reserved as keyword'
else:
print 'okay as an identifier'
6-3
排序
(a) 输入一串数字,从大到小排列之.
(b) 跟 a 一样,不过要用字典序从大到小排列之
(a)
numstr=raw_input('input some numbers: ')
numlist=list(numstr)
n=len(numlist)
for i in range(0,n):
for j in range(0,n-i-1):
if int(numlist[j])
score=[65,76,87,98]
print (sum(score)/len(score))
6-5 字符串
(a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:在你的方案里加入大小写区分.
(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对例如控制符号和空格的支持。
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串.
(a)
s=raw_input('Enter a string:')
i=0
while i
6-6 字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格(如果使用 string.*strip()函数那本练习就没有意义了)
str=raw_input('Enter a string:')
i=0
j=len(str)-1
while 1:
if str[i]==' ':
i+=1
else:
break
while 1:
if str[j]==' ':
j-=1
else:
break
print str[i:j+1]
#功能:删除列表中能被输入的数整除的元素
num_str=raw_input('Enter a number: ')
num_num=int(num_str)
fac_list=range(1,num_num+1)
print "before:",fac_list
i=0
while i
single=['','one','two','three','four','five','six','seven','eight','nine']
double1=['ten','eleven','tweleve','thirting','fourting','fifting','sixting','seventing','eighting','nineting']
double2=['','','twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety']
numstr=raw_input('Enter a number 0--1000: ')
numlen=len(numstr)
num=int(numstr)
if numlen==1:
if int(numstr[0])>0:
print single[num]
else:
print 'zero'
elif numlen==2:
if numstr[0]=='1':
print double1[num-10]
else:
print double2[int(numstr[0])]+'-'+single[int(numstr[1])]
elif numlen==3:
if numstr[1]=='1':
tmp=double1[int(numstr[2])]
else:
tmp=double2[int(numstr[1])]+'-'+single[int(numstr[2])]
print single[int(numstr[0])]+' hundred '+tmp
else:
print 'one thousand'
min=int(raw_input('please input a number as minutes: '))
def totaltime(min):
if min<60:
print '0 hours %d minutes' %(min)
elif min>=60:
print '%d hours %d minutes' %(min/60,min%60)
totaltime(min)
ostr=raw_input('please input a string: ')
def changecase(str):
dstr=str.swapcase()
print dstr
changecase(ostr)
a)ip=int(raw_input('please input a number as IP: '))
print 'IP'+'='+str(int(int(ip)/16777216) & 255)+'.'\
+str(int(int(ip)/65536) & 255)+'.'+str(int(int(ip)/256) & 255)+'.'+str((int(ip) & 255))
b)ip=raw_input('please input a IP like xxx.xxx.xxx.xxx : ')
print 'IP'+'='+str(int(ip.split('.')[0])*16777216+int(ip.split('.')[1])*65536+\
int(ip.split('.')[2])*256+int(ip.split('.')[3]))
a)
def findchr(string, char):
strlen=len(string)
if char in string:
for i in range(strlen):
if char==string[i]:
print i
else:
print -1
b)
def rfindchr(string, char):
strlen=len(string)
if char in string:
for i in range(strlen):
if char==string[-1-i]:
print strlen-i-1
break
else:
print -1
c)
def subchr(string, origchar, newchar):
while(1):
if findchr(string,origchar)==-1:
break
else:
p=findchr(string,origchar)
string=string[:p]+newchar+string[p+1:]
print string
str=raw_input('input a string as comlex number:')
def atoc(str):
strlen=len(str)
for i in range(strlen):
if '+'==str[-1-i] or '-'==str[-1-i]:
op1=str[:-1-i]
op2=str[-1-i:-1]
break
else:
continue
print complex(float(op1),float(op2))
atoc(str)
import random
print '0 siccsor'
print '1 stone'
print '2 fabric'
print '3 quit'
list = ['siccsor','stone','fabric']
while True:
i = input("pls input operation number: ")
if (3 == i):
break
elif (i<0 or i>3):
print 'Error input operation, try agin. 3 operation is quit\n'
continue
c = random.randint(0,2)
if (i == c):
print 'your is %s, computer is %s ' % (list[i],list[c])
print 'it is draw'
elif (i-c) == 2 or (i-c) == -1:
print 'your is %s, computer is %s ' % (list[i],list[c])
print 'computer win'
else:
print 'your is %s, computer is %s ' % (list[i],list[c])
print 'you win'
import time
def isLeapYear(year):
if (year%4==0 and year%100!=0) or (year%400==0):
return True
def IntervalDays(str1,str2):
month1 = [0,31,28,31,30,31,30,31,31,30,31,30,31]
month2 = [0,31,29,31,30,31,30,31,31,30,31,30,31]
#假定输入的日期都是正确的且后一个日期比前一个日期大
bdate = str1.split('/')
bdate[0],bdate[1],bdate[2]=int(bdate[0]),int(bdate[1]),int(bdate[2])
edate = str2.split('/')
edate[0],edate[1],edate[2]=int(edate[0]),int(edate[1]),int(edate[2])
if bdate==edate:
print '0 days'
elif bdate[1]==edate[1] and bdate[2]==edate[2]:
print '%d days' %abs(bdate[0]-edate[0])
elif bdate[1]!=edate[1] and bdate[2]==edate[2]:
bdays=0
edays=0
if isLeapYear(bdate[2]):
for i in range(1,bdate[1]):
bdays+=month2[i]
bdays=bdays+bdate[0]
for i in range(1,edate[1]):
edays+=month2[i]
edays=edays+edate[0]
print '%d days' %abs(edays-bdays)
else:
for i in range(1,bdate[1]):
bdays+=month1[i]
bdays=bdays+bdate[0]
for i in range(1,edate[1]):
edays+=month1[i]
edays=edays+edate[0]
print '%d days' %abs(edays-bdays)
elif bdate[2]!=edate[2]:
days=0
for i in range(bdate[2]+1,edate[2]):
if isLeapYear(i):
days+=366
else:
days+=365
if isLeapYear(bdate[2]):
for i in range(bdate[1]+1,13):
days+=month2[i]
days+=(month2[bdate[1]]-bdate[0])
else:
for i in range(bdate[1]+1,13):
days+=month1[i]
days+=(month1[bdate[1]]-bdate[0])
if isLeapYear(edate[2]):
for i in range(1,edate[1]):
days+=month2[i]
days+=edate[0]
print '%d days' %(days)
else:
for i in range(1,edate[1]):
days+=month1[i]
days+=edate[0]
print '%d days' %(days)
if __name__=='__main__':
#(a)
date1=raw_input("input a start date as DD/MM/YYYY: ")
date2=raw_input("input a end date as DD/MM/YYYY: ")
IntervalDays(date1,date2)
#(b)
birth=raw_input("input a birth date as DD/MM/YYYY: ")
today=str(time.strftime("%d/%m/%Y"))
print 'today is %s ' %today
IntervalDays(birth,today)
#(c)
birth=raw_input("input a birth date as DD/MM/YYYY: ")
today=str(time.strftime("%d/%m/%Y"))
print 'today is %s ' %today
if today.split('/')[1]
a)两个矩阵的维数相等才能相加
a = ([1,2,3],[4,5,6],[7,8,9])
b = ([9,8,7],[6,5,4],[3,2,1])
c = ([0,0,0],[0,0,0],[0,0,0])
for i in range(0,len(a)):
for j in range(0,len(b)):
c[i][j] = a[i][j]+b[i][j]
print c
b)矩阵1的列数与矩阵2的行数相等两个矩阵才能相乘
a = ([1,2,3,4],[5,6,5,8],[9,10,11,12])
b = ([1,1,1],[1,1,1],[1,1,1],[1,1,1])
c = ([0,0,0],[0,0,0],[0,0,0])
for m in range(0,len(c)):
for i in range(0,len(a)):
for j in range(0,len(b)):
c[m][i] += a[i][j]*b[j][i]
print c
l=[1,2,3,4,5]
def mypop(list):
tmp=list[-1]
del list[-1]
return tmp
print mypop(l)
print l
6-18 zip()内建函数。在6.13.2节里面关于zip()函数的例子中,zip(fn,ln)返回的是什么?
返回一个列表,列表中的每个元素是一个元组
6-19 多列输出。有任意项的序列或者其他容器,把它们等距离分列显示。由调用者提供数据和输出格式。例如,如果你传入100个项并定义3列输出,按照需要的模式显示这些数据。这种情况下,应该是两列显示33个项,最后一列显示34个。你可以让用户来选者水平排序或者垂直排序。
import random
list = []
nums = input("pls input a number for iterms: ")
clns = input("pls input a number for columns: ")
for i in range(0,nums):
list.append(i+1)
print list
print '0 horizontal sort'
print '1 vertical sort'
print '2 quit'
while True:
print
i = input("pls input operation number: ")
if (2 == i):
break
elif (i<0 or i>2):
print 'Error input operation, try agin. 3 operation is quit\n'
continue
if (0 == i):
n = 0
for m in range(0,nums):
print "%4d" %list[m],
n += 1
if n % clns == 0:
print
elif (1 == i):
n = 0
for i in range(0,nums/clns+1):
if i == nums/clns:
for j in range(0,nums%clns):
print 4*clns*' '+str(list[i*clns+j])
else:
for j in range(0,clns):
print "%4s" %str(list[i+j*(nums/clns)]),
print
n += 1
if n % clns == 0:
continue