猫史档案馆


【Python作品分享】Number 库(1.2.0版本)【作品秀】

用户:THORNSTHORNS查看:0 回复:2 评论:0 创建时间:2021-06-29T18:03:55


【作品展示】

center_image

 

【作品介绍】

Number库1.2.0版本更新公告

更新时间:2021年6月29日

更新内容

1.介绍更新:为介绍内容添加了换行符,使画面更加整洁

2.第二部分新增:新增分数运算部分,包括约分、通分两个内容

3.互质数新增:新增互质数判断函数

4.报错信息优化:报错信息由窗口弹出,更简单明了

一只大聪明

2021年6月29日

 

【作品源代码】

import sys
from PySide2.QtWidgets import *

# 使用PySide2介绍
app = QApplication(sys.argv)
txt = ['本次更新后版本:\n1.2.0版本',
       '本次更新时间:\n2021年6月29日',
       '本次更新内容:\n1.更改了介绍界面,添加了换行符,使画面更加美观\n2.增加了第二部分:分数运算部分,目前有约分、通分两个功能\n3.第一部分添加了判断几个数是否为互质数的函数comprime()\n4.优化了大多数函数的报错机制,用弹窗提醒错误信息',
       '作者:\n一只大聪明',
       '温馨提示:\n如有疑问,请登录https://shequ.codemao.cn/community/381285查看详情或进行评价']
window = QMainWindow()
for i in txt:
    QMessageBox.information(window,
                            'Number 库介绍',
                            i,
                            QMessageBox.Yes,
                            QMessageBox.Yes)

'''第一部分:整数运算'''

# 找一个数所有的因数
def factor(num):
    factors = []
    for i in range(num-1):
        i += 1
        if num % i == 0:
            factors.append(i)
    factors.append(num)
    return factors

# 判断一个数是否为完全数
def per_num(num):
    sum = 0
    factors = factor(num)
    for i in range(len(factors)-1):
        sum += factors[i]
    if sum == num:
        return True

# 判断一个数是否为质数
def pri_num(num):
    if len(factor(num)) == 2:
        return True
    else:
        return False

# 判断一个数是否为偶数
def even_num(num):
    if num %2 == 0:
        return True
    else:
        return False

# (最大)公因数
def hcf(num_list):
    if type(num_list) == list and len(num_list) > 1:
        common_f = []
        for i in factor(num_list[0]):
            common = True
            for j in num_list:
                if not i in factor(j):
                    common = False
            if common:
                common_f.append(i)
        return common_f, max(common_f)
    else:
        QMessageBox.warning(window, '注意', '请在该函数的参数内传入一个包含两个或以上数字的列表!')
        return
    # 注意:本函数会返回两个值:两个数的公因数和最大公因数;请在该函数的参数内传入一个包含两个或以上数字的列表!

# (最小)公倍数
def lcm(num_list):
    if type(num_list) == list and len(num_list) > 1:
        i = 1
        common = False
        while not common:
            common = True
            now_num = num_list[0]*i
            for j in num_list:
                if not now_num % j == 0:
                    common = False
            i += 1
        return now_num
    else:
        QMessageBox.warning(window, '注意', '请在该函数的参数内传入一个包含两个或以上数字的列表!')
        return
    #注意:请在该函数的参数内传入一个包含两个或以上数字的列表!

# 分解质因数
def pri_fac(num):
    pri_factors = []
    now_num = num
    while not pri_num(now_num):
        pri_factor = factor(now_num)[1]
        now_num = int(now_num/pri_factor)
        pri_factors.append(pri_factor)
    pri_factors.append(now_num)
    if pri_factors:
        text = '{} = '.format(num)
        for i in pri_factors:
            text += '{}*'.format(i)
        text += '1'
    else:
        text = '{} = {}'.format(num, num)
    return text

# 互质数
def coprime(num_list):
    if type(num_list) == list and len(num_list) > 1:
        if len(hcf(num_list)) == 1:
            return True
        else:
            return False
    else:
        QMessageBox.warning(window, '注意', '请在该函数的参数内传入一个包含两个或以上数字的列表!')
        return
    # 注意:请在该函数的参数内传入一个长度大于1的列表

'''第二部分:分数运算'''
# 注意:在本部分中,分数用[分母,分子]的形式表示,如五分之一表示为[5,1]

# 约分
def red_fr(fraction):
    if type(fraction) == list and len(fraction) == 2:
        if coprime(fraction):
            return fraction
        else:
            _,common_div = hcf(fraction)
            for i in range(2):
                fraction[i] = int(fraction[i]/common_div)
            return fraction
    else:
        QMessageBox.warning(window, '注意', '请在该函数参数内填入一个分数,这里的分数用[分子,分母]表示,如五分之一表示为[5,1]')
        return

# 通分
def den_di(fraction_list):
    wrong = False
    if type(fraction_list) == list and len(fraction_list) > 1:
        all_deno = []
        for i in fraction_list:
            if type(i) == list and len(i) == 2:
                all_deno.append(i[0])
            else:
                wrong = True

        if not wrong:
            common_deno = lcm(all_deno)
            for i in fraction_list:
                common_mul = int(common_deno/i[0])
                for j in range(2):
                    i[j] *= common_mul
            return fraction_list
    else:
        wrong = True

    if wrong:
        QMessageBox.warning(window, '注意', '请在该函数的参数内填入一个分数列表,这里的分数用[分子,分母]表示,如五分之一表示为[5,1]')
        return

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
THORNSTHORNS

恭喜,(咦,我护发水呢?)Number 库代码已经到150多行了(我只剩下997个肝了,原本有1000个的)!

点赞1


评论


THORNSTHORNS

往期版本网址

1.0.0版本(无第三方库,但是当时的最大公因数、最小公倍数还没有更新,只能求两个数的,用网页版也可以哦):https://shequ.codemao.cn/community/381285

1.0.1版本(有第三方库,time库,最大公因数、最小公倍数已经更新,具体情况见网址,如果用网页版的就把含有time库的代码删了):https://shequ.codemao.cn/community/382085

1.1.0版本(1.2.0版本的雏形,无报错信息与分数部分,其他基本一致):https://shequ.codemao.cn/community/382755

点赞0


评论