复习
-
获取字符的ASCII码
-
排序
-
lambda表达式
经典题 - 素因数 - Prime Factor
给一个正整数,打印出该数的素因数。
不知道什么是素因数,看这里素因数,质因数。
from math import sqrt
def primeFactors(m):
'''return the prime factors of the input number m '''
prime_factors = [] # 用于存储质因数
factor = 2 # 最小的质因数
upper_bound = int(sqrt(n)) # 一个数的因数中的上限
while factor <= upper_bound: # 从2开始遍历到上限
while m % factor == 0: # 判断当前值是否为因数
m //= factor
prime_factors.append(factor)
factor += 1
if m != 1:# 如果最后这个数不为1,则这个数也是素因数 # 感谢来自哇嘞同学的提醒,此处已修改
prime_factors.append(m) # 把自己放进结果里
prime_factors = [str(x) for x in prime_factors]
return f"{n} = {'*'.join(prime_factors)}"
n = 231084
print(primeFactors(n))
统计素因数个数
from math import sqrt
def primeterFactorInfo(m):
prime_factors = {}
factor = 2
upper_bound = int(sqrt(n))
while factor <= upper_bound:
while m % factor == 0:
m //= factor
if factor not in prime_factors:
prime_factors[factor] = 1
else:
prime_factors[factor] += 1
factor += 1
if m != 1:# 如果最后这个数不为1,则这个数也是素因数 # 感谢来自哇嘞同学的提醒,此处已修改
prime_factors[m] = 1
return prime_factors
n = 5432
primeterFactorInfo(n)
统计素因数个数之collections.counter
精度问题 - precision
来自罗同学的提醒:
这个round并不是上面说的五舍六入,有时候舍有时候会进,而是python自身的表示小数的精度问题。
测试和官方文档如下
- 测试精度
下面这段代码是把每一行的结果(除了等式)都输出,和matlab差不多。
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'
计算n以内的素数个数
计算程序运行时长
- timeit模块
官方文档:timeit - 计算小段代码模块运行时长
- globals函数
globals函数会返回当前环境的所有全局变量。在timeit中使用这个函数可以避免手动输入参数的麻烦。
官方文档:在页面的最下面最下面,最后一个
在程序中使用: