分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
网上有一个Python100小例子的栏目,里面代码良莠不齐,于是下面就自己实现了其中的一些案例。
01.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/24'# __Desc__ = '''题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。'''source = [1,2,3,4]for i in range(len(source)): for j in range(len(source)): for k in range(len(source)): if source[i]!=source[j] and source[i]!=source[k] and source[j]!=source[k]: print source[i],source[j],source[k]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
02.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/24'# __Desc__ ='''题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?'''money = int(raw_input('Please input the money:\n'))money_list = [1000000,600000,400000,200000,100000,0]percent_list = [0.01,0.025,0.03,0.05,0.075,0.1]scholarship = 0for index in range(0,6): if money > money_list[index]: scholarship +=(money-money_list[index])*percent_list[index] print (money-money_list[index])*percent_list[index] money = money_list[index]print scholarship
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
03.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/24'# __Desc__ = 一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?import mathfor i in range(1,10000): x = int(math.sqrt(i+100)) y = int(math.sqrt(i+268)) if (x*x == i + 100) and (y*y == i+268): print i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
04.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/24'# __Desc__ = 输入某年某月某日,判断这一天是这一年的第几天?year = int(raw_input('请输入年份:\n'))month = int(raw_input('请输入月份:\n'))day = int(raw_input('请输入日期:\n'))days = [0,31,59,90,120,151,181,212,243,273,304,334]result = 0if 0< month <= 12: result = days[month]else: result = 0result += dayif year%400==0 or (year%4==0 and year%100!=0): if month >2 : result +=1print '%d-%d-%d是今年的第%d天!'%(year,month,day,result)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
05.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 输入三个整数x,y,z,请把这三个数由小到大输出。# ls = []# for iten in range(0,3):# ls.append(int(raw_input('请输入一个数字:\n')))# ls.sort()ls = [1,3,6,2,4,8,7,9,0]target = []for item in ls: target.append(item) target.sort() print targetprint '输入的数据由大到小的顺序为:\n',target
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
06.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 输出9*9乘法口诀表。for x in range(1,10): for y in range(1,x+1): # 原来实现Python2.7print的输出不换行的关键在于句末的一个小逗号啊!!! print "%d*%d=%d\t"%(x,y,x*y), print '\n'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
07.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 暂停一秒输出。import timeprint '一秒后将会处处另一句话!'time.sleep(1)print '这就是一秒后的那句话!'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
08.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,# 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?ls = [1,1]for item in range(0,6): top = ls[-1] sec_top = ls[-2] ls.append((top+sec_top)) ls.sort()for item in range(len(ls)): print '第%d个月,兔子数量为:%d'%(item+1,ls[item])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
09.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 判断101-200之间有多少个素数,并输出所有素数。def is_sushu(number): for item in range(2,number): if number%item==0: return False return Trueif __name__=="__main__": for i in range(101,201): if is_sushu(i): print i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
10.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,# 其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。# 返回给定数字的水仙花计数值def return_water_flower_number(number): ls = [] i = 0 while True: i = number %10 ls.append(i) number = (number -i)/10 if number ==0: break sum_sum = 0 for item in ls: sum_sum+=int(item)**3 return sum_sumif __name__=="__main__": for i in range(1,10000): if return_water_flower_number(i)==i: print i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
11.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。# 呵呵,这段代码我都佩服我自己了,竟然真的可以这么愉快的运行下去def fenjie(number): ls = [] i = 2 while True: if number%i==0: ls.append(i) number = number/i if number / i == 1: ls.append(number) break else: i+=1 if number/i ==1: ls.append(number) break return lsif __name__=="__main__": num = int(raw_input('请输入一个数字:\n')) print "%d的所有质因数是:%d=" % (num,num), for item in fenjie(num): print item,'*',
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
12.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。def retravel(number,times): result = 0 tag = number for index in range(1,times+1): result += number number = number*10+tag return resultif __name__=="__main__": number = int(raw_input('请输入0-9之间的一个数字:\n')) times = int(raw_input('请输入要循环的次数:\n')) print '结果是:',retravel(number,times)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
13.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 一个数如果恰好等于它的因子之和,这个数就称为"完数"。# 例如6=1+2+3.编程找出1000以内的所有完数。def is_full_number(number): ls = [] i = 1 for i in range(1,number): if number %i==0: ls.append(i) if i+1== number: break else: continue summary = 0 for i in ls: summary +=i if summary == number : return True else: return Falseif __name__ == "__main__": for i in range(1,10000): if is_full_number(i): print i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
14.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 一球从100米高度自由落下,每次落地后反跳回原高度的一半;# 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?def get_total_height(height,times): total_height = float(height) temp_height = 0.0 for i in range(1,times): height = float(height) /2 temp_height = height total_height+=2*height return (total_height,temp_height)if __name__=="__main__": height = 100.0 times = 10 print "所求高度和为:%d,最后一次落地弹起高度为:%d"%get_total_height(height,times)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
15.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。# 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。def get_total_peaches(day): total_peaches = 0 if day == 10: total_peaches = 1 else: total_peaches = (get_total_peaches(day+1)+1)*2 return total_peachesprint 'total peaches is:%d'%get_total_peaches(1)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
16.py
暂留
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/26'# __Desc__ = 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。def append(char): pass
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
17.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/31'# __Desc__ = 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。def isHuiWen(number): arr = str(number) start = 0 end = len(arr)-1 flag = (end-start)/2 while start <=end : print arr[start],arr[end] if arr[start]==arr[end]: start +=1 end-=1 else: return False return Trueif __name__=="__main__": result = isHuiWen(123321) if result: print "Yes" else: print "NO!"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
18.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/31'# __Desc__ = 按相反的顺序输出列表的值。def reverse_print(list): end = len(list)-1 while end>=0: print list[end] end-=1# 使用系统的内建方法,分片技术def reverse_slice(list): for item in list[::-1]: print itemdef reverse(list=[]): reverse_list = [] end = len(list)-1 while end>=0: reverse_list.append(list[end]) end-=1 return reverse_listif __name__ == "__main__": list = [1,2,3,4,5,6,7,8,9] # reverse_print(list) # result = reverse(list) # for item in result: # print item, reverse_slice(list)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
19.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/31'# __Desc__ = 按逗号分隔列表。def devide_list(list): # 这里的str(item)必须添加,否则会导致字符串拼接的类型不匹配的异常 return ','.join(str(item) for item in list)if __name__ =="__main__": list = [1,2,3,4,5,6,7] print devide_list(list)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
20.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/31'# __Desc__ = 文本颜色设置# 类似于shell形式的编写,可以改变终端下字体的颜色,达到一个很好的变成体验的效果class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m'print bcolors.OKGREEN + "警告的颜色字体?"+bcolors.UNDERLINE+"第二个颜色显示"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
21.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/31'# __Desc__ = 将一个数组逆序输出。def reverse_array(arr): left = 0 right = len(arr)-1 while left <=right: temp = arr[left] arr[left]= arr[right] arr[right]= temp left+=1 right-=1 return arrif __name__=="__main__": arr = ['1',2,3,'Hello'] arr = reverse_array(arr) print arr
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
22.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 交换两个数的值# 其实原理都是一样的,只不过Python可以借助于tuple,元组的形式来一次性的返回多个值# 相对于其他编程语言而言,这真的很方便def change(a,b): temp = a a = b b = temp return a,bdef exchange(a,b): a,b = b,a return a,bif __name__=="__main__": a ,b = 1,2 print '原来的值:%d---%d'%(a,b) a,b = exchange(a,b) print '值交换后:%d---%d' % (a, b) c,d = change(a,b) print '值交换后:%d---%d' % (a, b) print type(change(a,b))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
23.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 使用lambda来创建匿名函数。关键在于lambda表达式紧跟参数,以分号分隔后的表达式只能为算术逻辑表达式,不能有判断等语句MAX = lambda x,y: (x>y)*x + (x<y)*yMIN = lambda x,y: (x<y)*x + (x>y)*ySUM = lambda x,y: x+ySUB = lambda x,y: (x>y)*(x) + (x<y)*(y-x)MUT = lambda x,y:(x!=0)*(x*y) or 0DIV = lambda x,y: (x*y!=0)*(((float)(x)/(float)(y))) or "除数不能为0!"if __name__=="__main__": x = 10 y = 100 print "MAX:",MAX(x,y) print "MIN:",MIN(x,y) print "SUM:",SUM(x,y) print "SUB:",SUB(x,y) print "SUB:" , SUB(y, x) print "MUT:",MUT(x,y) print "DIV:",DIV(x,y) print "DIV:" , DIV(y, x)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
24.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 输出一个随机数。from random import *# 返回的是整数def rand_arrange_in(a, b): return randint(a, b)# 返回的不是整数def rand_uniform(a, b): return uniform(a, b)if __name__ == "__main__": start = 10 end = 28 print "---------------单个数字-------------------------" print "random int:%d" % rand_arrange_in(start, end) print "random uniform:%d" % rand_uniform(start, end) print "---------------多个数字-------------------------" print "random int:\n" for item in range(0, 10): print rand_arrange_in(start, end), print "\nrandom uniform:" for item in range(0, 10): print rand_uniform(start, end),
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
25.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 取一个整数a从右端开始的4〜7位。# 原文的例子是不正确的"""if __name__ == '__main__': a = int(raw_input('input a number:\n')) b = a >> 4 c = ~(~0 << 4) d = b & c print '%o\t%o' %(a,d)"""# 将所给的数字分解,取后四位def split1(number): number = str(number) result = [] length = len(number)-1 index = length-3 while index<=length: result.append(number[index]) index+=1 return ''.join(char for char in result)def split2(number): # if type(number) == 'str': # return number[0] # else: return int(number) % (10000)if __name__ == "__main__": number = 1234567890 print split1(number) print split2(number) str_num = str(1234567) print split2(str_num)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
26.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 使用Tkinter画同心圆def circle(width=800,height=600,bg='green'): from Tkinter import * # 确定画布信息 canvas = Canvas(width=width,height=height,bg=bg) canvas.pack(expand=YES,fill=BOTH) k = 1 j = 1 # 确定圆的个数 for index in range(0,32): # 画圆需要提供的参数信息 canvas.create_oval(width/2-k,height/2-k,width/2+k,height/2+k,width=1) k+=j j+=0.5 mainloop()if __name__ =="__main__": circle(1080,720,'purple')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
27.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 打印出杨辉三角形(要求打印出10行)。 # 本例为原题答案,非原创if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in range(10): a[i].append(0) for i in range(10): a[i][0] = 1 a[i][i] = 1 for i in range(2,10): for j in range(1,i): a[i][j] = a[i - 1][j-1] + a[i - 1][j] from sys import stdout for i in range(10): for j in range(i + 1): stdout.write(str(a[i][j])) stdout.write(' ') print
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
28.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 查找字符串。 # 返回第一次出现该子字符串的位置,从零开始计数def find(full_str,sub_str): return full_str.find(sub_str)# 采用自定义的"哈希算法",其实就是朴素的KMP算法实现。# 本来是想把full_str改装成多个长度和sub_str的字符串相等长度的数组来计算其哈希和,相等的话作进一步的判断,但是Python实现起来略显复杂def kmp(full_str,sub_str): sub_length = len(sub_str) full_length= len(full_str) for item in range(0,full_length-sub_length): # 设置 判断令牌 flag = False # 对每一个子串进行验证 for validate in range(0,sub_length): if full_str[item+validate]==sub_str[validate]: flag=True else: flag = False # 如果令牌为真,且长度刚好验证到sub_str的全部长度 if flag and validate==sub_length-1: return itemif __name__=="__main__": full = "I am a handsome boy" sub = " a" print find(full,sub) print kmp(full,sub)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
29.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。#def swap(arr): max_index = 0 min_index = 0 max = arr[0] min = arr[0] for item in range(len(arr)): if max<arr[item]: max = arr[item] max_index = item if min > arr[item]: min = arr[item] min_index = item max,arr[0] = arr[0],max min,arr[len(arr)-1] = arr[len(arr)-1],min return arrif __name__ =="__main__": arr = [1,2,3,4,5,6,7,8,9] print'交换前:',arr print '交换后:',swap(arr)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
30.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数# 将后面的M个数字全部转到前面,且顺序保持不变。利用了列表的分片操作def shift_right(ls,number): temp = ls[len(ls)-number:] ls = ls[0:len(ls)-number] for item in range(0,len(ls)): temp.append(ls[item]) return tempif __name__ == '__main__': ls = [1,2,3,4,5,6,7] print shift_right(ls,3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
31.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 809*??=800*??+9*??+1 其中??代表的两位数,# 8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。if __name__ == '__main__': a = 809 for i in range(10, 100): b = i * a + 1 if b >= 1000 and b <= 10000 and 8 * i < 100 and 9 * i >= 100: print b, '/', i, ' = 809 * ', i, ' + ', b % i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
32.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 某个公司采用公用电话传递数据,数据是四位的整数,# 在传递过程中是加密的,加密规则如下:每位数字都加上5,# 然后用和除以10的余数代替该数字,再将第一位和第四位交换,# 第二位和第三位交换。def decode(number): ge = number%10 shi = (number%100-ge)/10 bai = (number%1000-10*shi-ge)/100 qian = number/1000 ge,shi,bai,qian= (ge+5)%10,(shi+5)%10,(bai+5)%10,(qian+5)%10 qian,ge = ge,qian bai,shi = shi ,bai return qian*1000+bai*100+shi*10+geif __name__ == '__main__': number = 1221 print decode(number)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
33.py
# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/9/1'# __Desc__ = 列表转换为字典。# 系统内置的实现,也即是一个列表对应一个字典项,所以长度当且仅当为2!!!def build_in(ls_key,ls_value): # 列表项中的元素数据至多为2两个 # print dict([ls_value, ls_key]) return dict([ls_key,ls_value])# 自定义的实现,key集合匹配value集合实现列表转字典def my_translator(ls_key,ls_value): if len(ls_key)!=len(ls_value): print "键值对的长度不匹配!" exit(0) dict = {} for item in range(len(ls_key)): dict[ls_key[item]]=ls_value[item] return dictif __name__ == '__main__': ls_key = ['x', 'y'] ls_value = [1, 2] print build_in(ls_key,ls_value) ls_key.append('z') ls_value.append(3) print my_translator(ls_key,ls_value)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
总结
案例很简单,但是确实是编程思想的深刻的体现,做完这些小例子,方能感受到基础知识的重要性。
千万不要以为某些东西简单而一掠而过,否则还是会花费更多时间!