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想要的,它实际上不起作用不是你的错。