鱼C论坛

 找回密码
 立即注册
查看: 1181|回复: 2

Nonetype的错误,大佬给看看是哪里出错了

[复制链接]
发表于 2018-4-22 12:35:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 凡凡的老公 于 2018-4-22 12:46 编辑

本人在做毕设,在写一个函数的时候遇到了问题,在函数的输入值为底下的小数值时,运行结果正确,但当数值变成上面的大整数是,就会报Nonetype的错误,求大佬给指导指导,以下是代码
def        findMod(a,m):
        if a >= 0:
                return a%m
        else:
                for i in range(20000000):
                        B = (i*m)-(-a)
                        if B >= 0:
                                return B
                        else:
                                continue

def niyuan(a, m):
        u1,u2,u3 = 1,0,a
        v1,v2,v3 = 0,1,m
        while v3!=0:
                q = u3//v3
                v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
        return u1%m

def kp(k_st, x, y, p, a, n):
        #传进来的k_st模阶, x, y均为10进制数
        #首先把k转换成2进制
        k = int(findMod(int(k_st), int(n)))
        bin_num = bin(int(k))
        #print(bin_num)
        #再将2进制数颠倒,取出其前n-2为数
        bin_len = len(bin_num) - 2
        bin_re_list = []
        for i in bin_num[::-1]:
                bin_re_list.append(i)
                bin_len -= 1
                if bin_len == 0:
                        break
        #print(bin_re_list)
        #print(len(bin_re_list))
        Rx_list = []
        Ry_list = []
        Rx_list.append(x)
        Ry_list.append(y)
        for i in range(len(bin_re_list)-1):
                fenmu = niyuan(2*y, p)
                A = findMod((3*(x**2)+a)*fenmu, p)
                x3 = findMod((A**2)-x-x, p)
                y3 = findMod(A*(x-x3)-y, p)
                Rx_list.append(x3)
                Ry_list.append(y3)
                x = x3
                y = y3
        #print(Rx_list)
        #print(Ry_list)
        #print(len(Rx_list), len(Ry_list))
       
        Rx_list_add = []
        Ry_list_add = []
        for j in range(len(bin_re_list)):
                if int(bin_re_list[j]) == 1:
                        #print('one')
                        Rx = Rx_list[int(j)]
                        Ry = Ry_list[int(j)]
                       
                        Rx_list_add.append(Rx)
                        Ry_list_add.append(Ry)
        #print(Rx_list_add)
        #print(Ry_list_add)
       
        if len(Rx_list_add) == 1:
                Qx = Rx_list_add[0]
                Qy = Ry_list_add[0]
        if len(Rx_list_add) == 2:
                xx = Rx_list_add[0]
                yy = Ry_list_add[0]
               
                xxx = Rx_list_add[1]
                yyy = Ry_list_add[1]
               
                fenmu = niyuan(xxx-xx, p)
                A = findMod((yyy-yy)*fenmu, p)
                x3 = findMod((A**2)-xx-xxx, p)
                y3 = findMod(A*(xx-x3)-yy, p)
               
                Qx = x3
                Qy = y3
       
        if len(Rx_list_add) > 2:
                xx = Rx_list_add[0]
                yy = Ry_list_add[0]
               
                xxx = Rx_list_add[1]
                yyy = Ry_list_add[1]
                begin_num = 1
                while begin_num < len(Rx_list_add):
                       
                        fenmu = niyuan(xxx-xx, p)
                        A = findMod((yyy-yy)*fenmu, p)
                        x3 = findMod((A**2)-xx-xxx, p)
                        y3 = findMod(A*(xx-x3)-yy, p)
                        #print(x3, y3)
                       
                        xx = x3
                        yy = y3
                        if begin_num+1 < len(Rx_list_add):
                                xxx = Rx_list_add[begin_num+1]
                                yyy = Ry_list_add[begin_num+1]
                        else:
                                break
                        begin_num += 1
                Qx = xx
                Qy = yy

        Q_list = []
        Q_list.append(Qx)
        Q_list.append(Qy)
        return Q_list

k_st = 1939941892181582143063425055015927690442741898190876899856
x = 602046282375688656758213480587526111916698976636884684818
y = 174050332293622031404857552280219410364023488927386650641
p = 6277101735386680763835789423207666416083908700390324961279
a = -3
n = 6277101735386680763835789423176059013767194773182842284081
'''k_st = 7
x = 5
y = 1
p = 17
a = 2
n = 19'''
print(kp(k_st, x, y, p, a, n))

报错提示

报错提示
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-22 14:05:42 | 显示全部楼层
在循环里q变成1/0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-23 21:08:35 | 显示全部楼层

谢谢关心,那个,其实我已经找到问题了,其实第一个函数里面的else完全不需要,python的%本身就支持求模,还是很感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-29 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表