8-2.循环。编写一个程序,让用户输入3个数字:(f)rom,(t)o和(i)ncrement。以i为步长,从f开始计数到t,包括f和t。例如,如果输入的是f==2,t==26,i==4,程序将输出2,6,10,14,18,22,26。
1 def xh():
2 f=int(raw_input('from:'))
3 t=int(raw_input('to:'))
4 i=int(raw_input('increment:'))
5 #下面这个表达式用到了列表解析
6 print [f+i*x for x in range((t-f)/i)]+[t]
8-6.素因子分解。以刚才练习中的isprime()和getfactors()函数作为基础编写一个函数,他接受一个整型作为参数,返回该整型所有素数因子的列表。这个过程叫做求素因子分解,他输出的所有因子之积应该是原来的数字。注意列表可能有重复的元素。例如输入20,返回结果应该为[2,2,5]。
1 #8-4判定是否为质数
2 def isprime(n):
3 c=n/2
4 while c>1:
5 if n%c==0:
6 return False
7 break
8 c-=1
9 else:
10 return True
11
12 #8-5求整除因子
13 def getfactors(n):
14 return [i for i in range(1,n+1) if n%i==0]
15
16 #8-6
17 def PrimeFactors(n):
18 #定义质数因子程序
19 def prime(n):
20 return [i for i in getfactors(n) if isprime(i) and i>1]
21 result=prime(n)
22 #余数不等于1,则继续求质数因子,并添加到result序列
23 while True:
24 cj=1
25 for i in jg:
26 cj*=i
27 ys=n/cj
28 if ys!= 1:
29 result += prime(ys)
30 else:
31 break
32 return sorted(jg)
8-11.文本处理。要求输入一个姓名列表,输入格式是"last name,first name"即姓 逗号 名。编写程序处理输入,如果用户输入错误,比如'first name last name',请纠正这些错误,并通知用户。同时你还需要记录输入错误次数。当用户输入结束后,给列表排序,然后以”姓,名“的顺序显示。
1 def nametrack():
2 #定义判定名字格式是否正确的函数
3 def nameformat(name):
4 name_split=name.split(',')
5 name_strip=name.split(' ')
6 #如果用逗号分解字符串得到的列表长度为二,而且没有空格,则符合格式
7 if len(name_split)==2 and len(name_strip)==1:
8 return True
9 else:
10 return False
11
12 name=[]
13 #定义正确和错误的名字计数
14 m=1
15 n=1
16 while True:
17 ts='please enter name %d :' % m
18 newname=raw_input(ts)
19 #如果回车则停止输入
20 if newname in '\r\n':
21 break
22 if nameformat(newname):
23 m+=1
24 name.append(newname)
25 else:
26 print 'wrong format...should be last,first.\n\
27 you have done this %d times already.fixing input...' % n
28 n+=1
29 result=sorted(name)
30 print 'the sorted list (by last name) is:'
31 for eachname in result:
32 print eachname