NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
| 获取完数 | | | --- | --- | ``` 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数 from sys import stdout for j in range(2,1001): k = [] n = -1 s = j for i in range(1,j): if j % i == 0: n += 1 s -= i k.append(i) if s == 0: print j for i in range(n): stdout.write(str(k[i])) stdout.write(' ') print k[n] 输出: 6 1 2 3 28 1 2 4 7 14 496 1 2 4 8 16 31 62 124 248 ``` | 分别统计字符串个数 | | | --- | --- | ``` 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数,且不能为'\n' import string s = 'asd1234 /*-' letters = 0 #字母 space = 0 #空格 digit = 0 #数字 others = 0 #其它字符 for c in s: if c.isalpha(): letters += 1 elif c.isspace(): space += 1 elif c.isdigit(): digit += 1 else: others += 1 print 'char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others) 输出:char = 3,space = 2,digit = 4,others = 3 ``` | 正整数分解质因数 | | | --- | --- | ``` 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 def reduceNum(n): print '{} = '.format(n), if not isinstance(n, int) or n <= 0 : print '请输入一个正确的数字 !' exit(0) elif n in [1] : print '{}'.format(n) while n not in [1] : # 循环保证递归 for index in xrange(2, n + 1) : if n % index == 0: n /= index # n 等于 n/index if n == 1: print index else : # index 一定是素数 print '{} *'.format(index), break print reduceNum(3) 输出 90 = 2 * 3 * 3 * 5 ``` | 水仙花数 | | | --- | --- | ``` 解释:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方 for n in range(100, 1000): i = n / 100 #获取百位 j = n / 10 % 10 #获取十位 k = n % 10 #获取个位 if i ** 3 + j ** 3 + k ** 3 == n: print n 153 370 371 407 ``` | 九九算法乘法表 | | | --- | --- | ``` for i in range(1, 10): print for j in range(1, i + 1): print "%d * %d = %d" % (i, j, i * j), #最后二个pring后面加的',',是在同一个for里面输出的值不换行 #第一个print输出换行 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 ``` | 小球自由落体弹跳 | | | --- | --- | ``` 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? tour = [] #记录每一次弹跳的距离 height = [] #记录每一次的高度 hei = 100.0 #起始高度 tim = 10 #次数 for i in range(1, tim + 1): # 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下) if i == 1: tour.append(hei) else: tour.append(hei*2) hei /= 2 height.append(hei) print ('总高度:tour = {0}' . format(sum(tour))) print ('第10次反弹高度:height = {0}' . format(height[-1])) ``` | 猴子吃桃问题 | | | --- | --- | ``` 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。 x2 = 1 #最后一个桃,假设:1 = (x / 2) -1 for day in range(9, 0, -1): x1 = (x2 + 1) * 2 x2 = x1 print x2 或 def mon(day, n): if day == 1: return n else: n = mon(day - 1, (n + 1) * 2) return n print mon(10, 1) ``` | 打印菱形 | | | --- | --- | ``` 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 from sys import stdout for i in range(4): for j in range(2 - i + 1): stdout.write(' ') for k in range(2 * i + 1): stdout.write('*') print for i in range(4): for j in range(i + 1): stdout.write(' ') for k in range(4 - 2 * i + 1): stdout.write('*') print ``` | 数列 | | | --- | --- | ``` 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 程序分析:请抓住分子与分母的变化规律。 a = 2.0 b = 1.0 s = 0 for n in range(20): s += a / b t = a a = a + b b = t print s 输出:32.6602607986 ``` | 累加,累乘 | | | --- | --- | ``` s = 1 t = 0 for n in range(1, 21): s *= n t += n print s,t ``` | 判断是否为回文 | | | --- | --- | ``` 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 def hui(n, flag=True): for i in range(len(n)/2): if n[i] != n[-i -1]: flag = False break return flag print hui('12321') ``` | 设置文本颜色 | | | --- | --- | ``` 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.WARNING + "警告的颜色字体?" + bcolors.ENDC ``` | 获取素数 | | | --- | --- | ``` lower = int(2) upper = int(10) for n in range(lower, upper + 1): if n > 1: for i in range(2, n): if (n % i) == 0: break else: #这个else是for的,即不是break的时候执行 print n ``` | 冒泡排序 | | | --- | --- | ``` l = [2, 5, 8, 10, 4] n = len(l) for i in range(n - 1): for j in range(i+1, n): # 第二个循环开始大于第一个 if l[i] > l[j]: #两者比较 #值的位置替换 t = l[i] l[i] = l[j] l[j] = t print l ``` | 模拟类的静态化 | | | --- | --- | ``` class Static: StaticVar = 5 def varfunc(self): self.StaticVar += 1 return self.StaticVar1 a = Static() for i in range(3): print a.varfunc() 输出:6,7,8 ``` | 两矩阵相加 | | | --- | --- | ``` X = [[12,7,3], [4 ,5,6], [7 ,8,9]] Y = [[5,8,1], [6,7,3], [4,5,9]] result = [[0,0,0], [0,0,0], [0,0,0]] # 迭代输出行 for i in range(len(X)): # 迭代输出列 for j in range(len(X[0])): result[i][j] = X[i][j] + Y[i][j] for r in result: print(r) 输出: [17, 15, 4] [10, 12, 9] [11, 13, 18] ``` | 杨辉三角形 | | | --- | --- | ``` 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 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 ``` | 列表元素左右移动 | | | --- | --- | ``` num = [2, 8, 6, 1, 78, 45, 34, 2] n = len(num) m = 5 def move(arr, n, m): arr_end = arr[n - 1] #取最后一个元素 #元素全部往前挪一个位置 for i in range(n - 1, -1, -1): arr[i] = arr[i - 1] arr[0] = arr_end #修改第一个元素 m -= 1 if m > 0:move(arr, n, m) move(num, n, m) print num 输出 [1, 78, 45, 34, 2, 2, 8, 6] ``` | 类似丢手绢的游戏 | | | --- | --- | ``` 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 n = 34 #总人数 num = [] #人的编号,写入列表 for i in range(n): num.append(i + 1) i = 0 k = 0 m = 0 #循环判断,如果为第三个则填充为0 while m < n - 1: if num[i] != 0: k += 1 #当第三个的时候执行 if k == 3: num[i] = 0 k = 0 m += 1 i += 1 #列表下标 if i == n: i = 0 i = 0 while num[i] == 0: i += 1 print num[i] 输出 10 ```