python int转str_用python写因式分解程序(一)

python写因式分解程序(一)

近段时间被微信上漫天飞舞的广告怂恿,学起了python编程,这些天找了一个小题目开整:因式分解

总体实现过程设计:

第一阶段:先满足实现既定的功能

第二阶段:优化程序,提高计算速度

第三阶段:python程序写好了,但没有界面总是不舒服,那就借助VB6编写一个界面,后台调用python的运算程序,让用户输入一个数据按Enter键后就能显示结果,这就是VB6+python的结合编程

大概的要求是这样的:由用户任何输入一个>=2的正整数后,程序得到这个数的因式分解的表达式,比如:

10 2*5

205 5*41

786 3*3*3*29

1573 11*11*13

578942*3*9649

从以上例子可以看出,一个正整数分解后的各个因子必定全部都是质数,所以得先找到质数因子。

将这个任务分成四个步骤处理:

1.找到质数列表:先找到输入正整数所在范围内的所有质数(质数就是只能被1和本身整除的大于等于2的正整数,最小的质数是2),并存到一个列表中

2.找到输入数的分解因子:采用循环遍历方式,将输入数与质数列表中的质数一一相除,能整除的质数,就是要找的质数因子,将找到的质数因子存到新的列表中

3.找到因子的个数:第二步中找到了分解的因子,但因子的个数不能确定,比如786的分解因子是329,但由几个3和几个29相乘,必须找出来,再一次用输入数与因子作整除,用新列表记录能整除的次数,就是几个因子相乘

4.验算结果是否正确:将所有因子相乘(当然要包含相乘个数),检验乘积是否与输入数相符

5.显示因式分解的表达式:有了因子,有了因子的个数,就可以得到分解的表达式,右边是全部相乘的方式

按以上的方式进行程序的编写:

     # python_fenjieV0

# 查找用户指定的正整数范围内有哪些是质数,并对其进行因式分解

#找出指定数据范围内的所有质数 并找到分解因子的函数susu()

def susu(int_shuju):

# 1.找出质数

zhisu = []

for num in range(2, int_shuju+1):

for i in range(2, num):

if num % i == 0:

break

else:

zhisu.append(num)

print('1{0}范围内的质数共有{1}'.format(int_shuju, len(zhisu)))

print('找到的1-{0}范围内的质数如下:'.format(int_shuju))

print(zhisu)

# 2.寻找因子

fenjie= []

len_zhisu = len(zhisu)

for m in range(len_zhisu):

if int_shuju % zhisu[m] == 0:

fenjie.append(zhisu[m])

return fenjie

# 找出各个分解因子的个数函数guoshu()

def guoshu(int_num, i):

pcs = 0                   # 记个数

flag = 1                   # 标记

while(flag ==1):            # 不知道循环次数要用while

if int_num%aa[i] == 0:

int_num = int(int_num/aa[i])

pcs =pcs + 1

flag = 1

else:

flag = 0

return pcs

key = 0

while(key == 0):

# 用户指定一个数

int_num = input('请输入一个正整数(>=2):')

# 去除输入字符串首尾的空格

int_num = int_num.strip()

# 先进行判断输入的字符串是不是数字型的            

if int_num.isdigit() == False:

print('你的输入有误,请输入>=2的正整数!')

key= 0

# 如果是数字型的字符串,就转成整数型

# int()会转成整数型,就算输入的是float型会直接删去小数部分

else:

int_num = int(int_num)

if int_num<2:        # 输入的数必须>=2

print('你的输入有误,请输入>=2的正整数!')

key=0

else:

key=1

break

print()

print('***1.找出指定范围内所有的质数***')

# 调用函数找到所有质数 并找到数据的所有的分解因子

aa = susu(int_num)

print()

print('***2.列出指定数据的所有因子***')

print('数字{}分解的因子为:'.format(int_num))

# 显示所有的分解因子

print(aa)

print()

print('***3.确定上述因子的个数***')

# 用列表记录各个因子的个数,先定义为空

list_guoshu = []

# 列表aa的长度

len_aa = len(aa)

for i in range(len_aa):

# 调用函数找出各个因子的个数

bb = guoshu(int_num, i)

# 找到的个数加入列表中

list_guoshu.append(bb)

# 显示列表中存储的个数

print(list_guoshu)

print()

# 验算分解的结果是否无误

print('***4.验算分解的结果***')

total = 1

for i in range(len_aa):

total = total * aa[i]**list_guoshu[i]

print('分解因子的乘积为{}'.format(total))

if (int_num == total):

print('数字{0}分解无误!'.format(int_num))

else:

print('数字{0}分解有误!'.format(int_num))

print()

# 按常规格式显示分解的结果,用字符串的方法作显示

print('***5.显示分解的结果***')

str_aa = ''

str_pow ='^'

str_ch =' * '

str_list_guoshu = ''

str_result = ''

for i in range(len_aa):

str_aa = str(aa[i])

str_list_guoshu = str(list_guoshu[i])

if i ==0:

str_result =str_result + str_aa + str_pow + str_list_guoshu

else:

str_result =str_result + str_ch + str_aa + str_pow + str_list_guoshu

print('分解表达式: {0} = {1}'.format(int_num, str_result ))

说明:^表示幂运算

56f02150217ee94657ed7f4e1fb32ab9.png

1515979acb0f63ed79fb24adf37e7f83.png

2337ce1ca493703b842647e2a2195dd0.png

功能虽然实现了,但对于输入的数据在2万以上就出现明显等待,运算太慢,

以上程序还得进行优化,以提高速度才行,那就留到下一次继续吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值