Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么会出现内存错误?_Python - Fatal编程技术网

Python 为什么会出现内存错误?

Python 为什么会出现内存错误?,python,Python,这是我的密码: i=int(input("enter your number")) j=int(input("enter your number")) if i>j: #making x always greater than y x=i y=j elif i<j: x=j y=i else: print("invalid") k=y cyclelength=[] while k<=x: list=[k] while k!

这是我的密码:

i=int(input("enter your number"))
j=int(input("enter your number"))
if i>j: #making x always greater than y
    x=i
    y=j
elif i<j:
    x=j
    y=i
else:
    print("invalid")
k=y
cyclelength=[]
while k<=x:
    list=[k]
    while k!=1:
        if(k%2==0):
            k=i//2
        else:
            k=3*k+1
        list.append(k)
    cyclelength.append(len(list))
    k+=1
print(y," ",x," ",max(cyclelength))
i=int(输入(“输入您的号码”))
j=int(输入(“输入您的号码”))
如果i>j:#使x始终大于y
x=i
y=j

如果i你的意思可能是
k/=2
而不是
k=i//2

def循环长度(k):
断言k>0
计数=1
而k!=1:
k=k//2如果k%2==0,其他3*k+1
计数+=1
返回计数
k_,最大循环长度=最大(范围(y,x+1),键=循环长度)
或者两者兼得:

k,max_cyclelelength=max((k,cyclelelength(k))表示范围(y,x+1)内的k),
密钥=lambda对:对[1])

你的意思可能是
k/=2
而不是
k=i//2

def循环长度(k):
断言k>0
计数=1
而k!=1:
k=k//2如果k%2==0,其他3*k+1
计数+=1
返回计数
k_,最大循环长度=最大(范围(y,x+1),键=循环长度)
或者两者兼得:

k,max_cyclelelength=max((k,cyclelelength(k))表示范围(y,x+1)内的k),
密钥=lambda对:对[1])

此块中的另一个问题:

while k!=1:
    if(k%2==0):
        k //= 2
    else:
        k=3*k+1
退出时,k的值为1

因此,将k增加到2,重新输入while,因为k -->无限循环


您必须在内部while中定义一个新变量,或在另一个函数中提取此块

此块中的另一个问题:

while k!=1:
    if(k%2==0):
        k //= 2
    else:
        k=3*k+1
退出时,k的值为1

因此,将k增加到2,重新输入while,因为k -->无限循环


您必须在内部定义一个新变量,或者在另一个函数中提取此块

n=y
cyclelength=[]
while n<=x:
    k=n
    list=[k]
    while k!=1:
        if(k%2==0):
            k//=2
        else:
            k=3*k+1
        list.append(k)
    cyclelength.append(len(list))
    n+=1
n=y
循环长度=[]

而我认为你是在

n=y
cyclelength=[]
while n<=x:
    k=n
    list=[k]
    while k!=1:
        if(k%2==0):
            k//=2
        else:
            k=3*k+1
        list.append(k)
    cyclelength.append(len(list))
    n+=1
n=y
循环长度=[]

而n这看起来像是你在玩游戏。试一试


这看起来像是你在玩游戏。试一试


你想在这里做什么?
k
永远不会是
1
所有附录的内存空间都用完了。作为可读性的一般说明,你应该使用比简单字母更有意义的变量名(除非处理非常简单和简短的算法,或者某些约定,例如在for循环中使用“i”作为循环变量)。这将使将来维护代码变得更容易。要使调试更容易,请添加import sys;print k;sys.stdout.flush()在循环内部,你想在这里做什么?
k
永远不会是
1
所有附录的内存空间都用完了。作为可读性的一般说明,你应该使用比简单字母更有意义的变量名(除非处理非常简单和简短的算法,或者某些约定,例如在for循环中使用“i”作为循环变量)。这将使将来维护代码变得更容易。要使调试更容易,请添加import sys;print k;sys.stdout.flush()在循环+1内部,因为这似乎实现了OP想要的算法,而且非常容易理解。该算法实际上不起作用(例如,如果你给它0,或者给它一个负数,对于较低的值,显然它永远不会变为正数…),但那不是你的错。@abarnert:我已经添加了断言,但是无效的
y
应该在前面被放弃。问题是,3x+1迭代收敛于所有正x只是一个未经证实的猜想,所以,除非你能证明这个猜想(或者解决停止问题,当然你不能),没有办法为OP的算法提供一个成功的实现。我只是提出了负数,因为这些负数明显不同,因此突出了问题。同样,你的实现是OP想要的,它实际上不起作用不是你的错。+1,因为这似乎实现了算法这个算法实际上不起作用(例如,如果你给它一个0,或者一个负数,作为较低的值,显然它永远不会变成正数…),但那不是你的错。@abarnert:我已经添加了断言,但是无效的
y
应该在前面被放弃。问题是,3x+1迭代收敛于所有正x只是一个未经证实的猜想,所以,除非你能证明这个猜想(或者解决停止问题,当然你不能),没有办法为OP的算法提供成功的实现。我只是提出了负数,因为这些负数明显不同,因此突出了问题。同样,你的实现是OP想要的,它实际上不起作用不是你的错。