Python: Exercise Examples
- 从低位依次打印,并计算位数
n = int(input('number: ')) count = 0 while True: print(n % 10) n = n // 10 count += 1 if n == 0: break print('number of digits: ', count)
- 从高位依次打印(必须先得到位数)
n = int(input('number: ')) count = 0 if n > 1000: if n > 10000: count = 5 else: count = 4 else: if n > 100: count = 3 elif n > 10: count = 2 else: count = 1 print('digits: {0}'.format(count)) prev = 0 for i in range(count, 0, -1): curr = n // (10 ** (i - 1)) print(curr - prev * 10) prev = curr
- 求1-5 factorial 和
sum = 0 for i in range(1, 6): n = 1 for j in range(1, i + 1): n *= j sum += n else: print(sum) tmp = 1 # method 2 sum = 0 for i in range(1, 6): tmp *= i sum += tmp else: print(sum)
- prime number
- 九九乘法表
for i in range(1,10): for j in range(1,i+1): print('{1} * {0} = {2}\t'.format(i,j,i*j),end='') print()
for i in range(1,10): for j in range(1,i+1): product=i*j if j>1 and product<10: product=str(product)+' ' else: product=str(product) print(str(j)+'*'+str(i)+'='+product,end=' ') print()
for i in range(1,10): line='' for j in range(1,i+1): line+='{0}*{1}={2:<2} '.format(j,i,i*j) print(line)
for i in range(1, 10): line = '' for j in range(1, 10): if j < i: line += ' ' * 7 else: line += '{}*{}={:<2} '.format(i, j, i * j) print(line)
for i in range(1, 10): print(' ' * 7 * (i - 1), end='') # print space for j in range(i, 10): print('{0}*{1}={2:<2} '.format(i, j, i * j), end='') print()
- 打印 rhombus
for i in range(-3, 4): if i < 0: prespace = -i else: prespace = i print(' ' * prespace + '*' * (7 - 2 * prespace)) for i in range(-3, 4): prespace = i if i >= 0 else -i print(' ' * prespace + '*' * (7 - 2 * prespace))
for i in range(-3, 4): print(' ' * abs(i) + '*' * (7 - 2 * abs(i)))
for i in range(-3, 4): if i < 0: prev = abs(i) post = 3 elif i == 0: prev = post = 0 else: prev = 3 post = i print(' ' * prev + '*' * (7 - prev - post)) for i in range(-3,4): if i==0: print('*'*7) print(' '*abs(i)+'*'*(4-abs(i))) if i<0 else print(' '*3+'*'*(3-i))
- 倒序打印输入字符, 并统计出现次数
while True: n = input('>').strip().lstrip('0') if n.isdecimal(): break else: print('{} format wrong'.format(n)) counter = [0] * 10 for b in range(10): counter[b] = n.count(str(b)) for b in range(10): if counter[b]: print(f'{b} counts: {counter[b]}') lst = list(n) lst.reverse() print(''.join(lst))
- 打印Fibonacci小于100项
b, p = 0, 1 print(p) while True: c = b + p if c > 100: break print(c) b = p p = c
求Fibonacci第10项
# Loop 1 b, p = 0, 1 for i in range(9): b, p = p, b + p else: print(p) # Loop 2 b, p = 0, 1 count = 0 while True: b, p = p, b + p count += 1 if count == 9: break print(p) # Recursive 1 def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(10)) # Tail Resursive def fibonacci(n, prev, next): if n == 1: return next return fibonacci(n - 1, next, prev + next) print(fibonacci(10, 0, 1))
- 求1000内的prime number
count = 0 lst1 = [] lst2 = [] for i in range(2, 1000 + 1): for j in range(2, i): if i % j == 0: break else: count += 1 lst1.append(i) print(count) count = 1 # add 2 # int(i**0.5)+1, 9, 15, 35 for i in range(3, 1000 + 1, 2): for j in range(3, int(i ** 0.5) + 1, 2): if i % j == 0: break else: count += 1 print(count) count = 2 for i in range(3, 1000 + 1, 2): tmp = i ** 0.5 for j in range(3, i, 2): if i % j == 0: break if j > tmp: count += 1 lst2.append(i) break print(count) for i in lst1: if i not in lst2: print(i)
import math n = 100 primes = [] for x in range(2, n + 1): for i in primes: if x % i == 0: break else: primes.append(x) print(len(primes)) primes.clear() for x in range(2, n + 1): flag = True for p in primes: if x % p == 0: flag = False break if p == math.ceil(math.sqrt(x)): print(p, x) if p > math.ceil(math.sqrt(x)): break if flag: primes.append(x) print(len(primes))
- 猴子吃桃
n = 1 for i in range(9): n = (n + 1) * 2 else: print(n) def peach(n): if n == 10: return 1 return peach(n + 1) * 2 + 2 print(peach(1))
n = 1 c = 0 # while True: # c += 1 # n = (n + 1) * 2 # if c == 9: # break while True: if c == 9: # 0-9,c==9,第十次没有执行循环 break c += 1 n = (n + 1) * 2 print(n)
- 杨辉三角
triangle = [] for i in range(6): vex = [] triangle.append(vex) for j in range(i + 1): if j == 0 or j == i: vex.append(1) # print(i, j, triangle, vex) else: # print(i, j, triangle, vex) vex.append(triangle[i - 1][j - 1] + triangle[i - 1][j]) print(triangle)
-
transport matric 转置矩阵
vex = list(range(1, 10)) vie = [] tmp = [] for i in vex: tmp.append(i) if i % 3 == 0: vie.append(tmp) tmp = [] print(vie) for i in range(len(vie)): for j in range(len(vie[i])): print(vie[j][i], end=' ') print()
vex = list(range(1, 10)) vie = [] tmp = [] for i in vex: tmp.append(i) if i % 3 == 0: vie.append(tmp) tmp = [] print(vie) # 对角线 i=j,非对角线i>j或i<j, 只需交换一边 for i in range(len(vie)): for j in range(i): # i>j vie[j][i], vie[i][j] = vie[i][j], vie[j][i] print(vie) for i in range(len(vie)): for j in range(i + 1, len(vie)): # i<j vie[j][i], vie[i][j] = vie[i][j], vie[j][i] print(vie) for i, row in enumerate(vie): for j, elem in enumerate(row): if i < j: vie[j][i], vie[i][j] = vie[i][j], vie[j][i] print(vie)
vie = [[1, 2, 3], [4, 5, 6]] vole = [] for i, row in enumerate(vie): for j, v in enumerate(row): if i == 0: vole.append([v]) else: vole[j].append(v) print(vole) vole = [] for row in vie: for i, v in enumerate(row): if len(vole) < i + 1: vole.append([]) vole[i].append(v) print(vole) vole = [[0 for i in range(len(vie))] for _ in range(len(vie[0]))] for i, row in enumerate(vie): for j, v in enumerate(row): vole[j][i] = vie[i][j] print(vole)
- 随机生成10个数字,统计重复和不重复个数
import random n = [] for _ in range(10): n.append(random.randrange(21)) print(n) same = [] diff = [] states = [0] * len(n) for i in range(len(n)): flag = False if states[i]: continue for j in range(i + 1, len(n)): if states[j]: continue if n[i] == n[j]: flag = True states[j] = 1 if flag: same.append(n[i]) states[i] = 1 else: diff.append(n[i]) print(same, diff)
- set 集合
import random s1 = set() s2 = set() for _ in range(10): s1.add(random.randrange(10, 21)) s2.add(random.randrange(10, 21)) print(s1, s2) print(f'common: {len(s1 | s2)}') print(f'unique: {len(s1 ^ s2)}') print(f'duplicate: {s1 & s2}')
- 简单选择排序
import random vixen = list(range(10)) random.shuffle(vixen) print(vixen) count_iter = count_swap = 0 for i in range(len(vixen)): min_index = i for j in range(i + 1, len(vixen)): count_iter += 1 if vixen[min_index] > vixen[j]: min_index = j if i != min_index: count_swap += 1 vixen[i], vixen[min_index] = vixen[min_index], vixen[i] print(vixen) print(count_iter) print(count_swap)
二元选择排序
import random vixen = list(range(10)) random.shuffle(vixen) print(vixen) count_iter = count_swap = 0 for i in range(len(vixen) // 2): # len(vixen)=odd: len(vixen)//2 自然被排好序 minindex = i maxindex = -i - 1 # 与minindex对称 maxorigin = maxindex for j in range(i + 1, len(vixen) - i): # 负索引也对称 count_iter += 1 if vixen[minindex] > vixen[j]: minindex = j if vixen[maxindex] < vixen[-j - 1]: maxindex = -j - 1 # not j if vixen[minindex] == vixen[maxindex]: # 剩余元素相同 break if i != minindex: vixen[i], vixen[minindex] = vixen[minindex], vixen[i] count_swap += 1 if maxorigin != maxindex and vixen[maxorigin] != vixen[maxindex]: # 2 2 2 2 1 情况 vixen[maxorigin], vixen[maxindex] = vixen[maxindex], vixen[maxorigin] count_swap += 1 print(vixen) print(count_iter) print(count_swap)
b = ['{:>04}.{}'.format(n, ''.join((random.choice(string.ascii_lowercase) for _ in range(5)))) for n in range(5)]
b = ['{:04}.{}'.format(n, ''.join((chr(random.randint(97, 122)) for _ in range(5)))) for n in range(5)]
['{:04}.{}'.format(n, ''.join((random.choice(bytes(range(97, 123)).decode()) for _ in range(10)))) for n in range(1, 101)]
- 生成随机captcha
import random def captcha(size=7): res = '' for i in range(size): lowercase = chr(random.randint(97, 122)) uppercase = chr(random.randrange(65, 91)) number = chr(random.randrange(48, 58)) res += random.choice((lowercase, uppercase, number)) return res print(captcha(8))
- 列表解析式打印九九乘法表
[print('{}*{}={:<3}{}'.format(j, i, i * j, '\n' if i == j else ' '), end=' ') for i in range(1, 10) for j in range(1, i + 1)]
-
while True: n = input('>>').strip().lstrip('0') if n.isdecimal(): break else: print('{} wrong'.format(n)) d = {} for b in n: if b not in d.keys(): d[b] = 0 d[b] += 1 # for b in n: # d[b] = d.get(b, 0) + 1 # for b in n: # if d.get(b, None): # d[b] += 1 # else: # d.setdefault(b, 1) for b in n: print(f'number: {b}, count: {d[b]}')
-
import random def vivify(*nums): return max(nums), min(nums) print(*vivify(*(random.randrange(10, 30) for _ in range(50))))
def vocal(n): for i in range(1, 13): for j in range(12, 0, -1): if j <= i: print('{:<{width}}'.format(j, width=1 if j == 1 else 3), end='') else: print(' ' * 3, end='') print() print() for i in range(12, 0, -1): for j in range(12, 0, -1): if j <= i: print('{:<{width}}'.format(j, width=1 if j == 1 else 3), end='') else: print(' ' * 3, end='') print() vocal(13)
def vivify(n): tail = ' '.join((str(i) for i in range(n, 0, -1))) width = len(tail) for i in range(1, n): print('{:>{}}'.format(' '.join((str(i) for i in range(i, 0, -1))), width)) print(tail) print() print(tail) for i in range(n - 1, 0, -1): print('{:>{}}'.format(' '.join((str(i) for i in range(i, 0, -1))), width)) vivify(13)
def vivify(n): head = ' '.join(((str(i) for i in range(n, 0, -1)))) print(head) for i in range(len(head)): # 空格分隔 if head[i] == ' ': print(' ' * i, head[i + 1:], sep=' ') vivify(13)
- 直接插入排序
import random nums = list(range(10)) random.shuffle(nums) print(nums) def insert_sort(vixen): count_assign = 0 vixen = [0] + vixen for i in range(2, len(vixen)): vixen[0] = vixen[i] # sentinel, 待插入值 j = i - 1 while vixen[j] > vixen[0]: count_assign += 1 vixen[j + 1] = vixen[j] j -= 1 vixen[j + 1] = vixen[0] print(count_assign) return vixen[1:] print(insert_sort(nums))
- 将数字倒序生成list
def vixen(n, l=None): if l is None: l = [] if n // 10: l.append(n % 10) return vixen(n // 10, l) l.append(n) return l print(vixen(1234)) def vixen(n, target=None): if target is None: target = [] x, y = divmod(n, 10) target.append(y) if x == 0: return target return vixen(x, target) print(vixen(12345)) def vixen(n, target=[]): if n: target.append(int(n[-1])) vixen(n[:-1]) return target print(vixen(str(1234))) def vixen(n): def vixen_(i): if i == -1: return '' return str(n)[i] + vixen_(i - 1) res = vixen_(len(str(n)) - 1) return [int(x) for x in res] print(vixen(12345))
- 猴子吃桃
def peach(n): if n == 10: return 1 return peach(n + 1) * 2 + 2 print(peach(1)) def peach(n, res=1): if n < 0: return -1 if n == 10: return res res = res * 2 + 2 return peach(n + 1, res) print(peach(1))
- 生成器实现febonacci
def febonacci(): b = 0 p = 1 while True: yield p b, p = p, b + p r = febonacci() for _ in range(5): print(next(r))
- 实现built-in函数sorted功能
import random vale = list(range(10)) random.shuffle(vale) def sort(iterable, reverse=False): ret = [] # def comp() for item in iterable: for i, v in enumerate(ret): # if item > v if reverse else item < v: # ret.insert(i, item) # break if reverse: if item > v: ret.insert(i, item) break else: if item < v: ret.insert(i, item) break else: ret.append(item) return ret print(vale) print(sort(vale, True)) print(sort(vale, 0))
抽离函数
def sort(iterable, reverse=False): ret = [] def comp(v, item, reverse): return item > v if reverse else item < v for item in iterable: for i, v in enumerate(ret): if comp(v, item, reverse): ret.insert(i, item) break else: ret.append(item) return ret
import random vale = list(range(10)) random.shuffle(vale) def comp(a, b): return a < b def sort(iterable, key=lambda a, b: a < b, reverse=False): ret = [] for item in iterable: for i, v in enumerate(ret): flag = key(v, item) if reverse else key(item, v) if flag: ret.insert(i, item) break else: ret.append(item) return ret print(vale) print(sort(vale, key=comp, reverse=True)) print(sort(vale, key=comp, reverse=False)) print(sort(vale))