Py学习  »  Python

如何使python程序运行得更快?我收到“9号死亡”信息,代码如下

J J • 3 年前 • 1286 次点击  

我试图演示自然数和有理数之间的双射,从N到Q。当我运行代码时,它会运行一段时间,之后进程会以“killd 9”消息终止。

n代表自然数,o代表分子,m代表分母

这是我的密码:

import numpy as np
 
n,m,o = 1766445895,1,1
N,M,O=[],[],[]
O.append(o)
M.append(m)
N.append(n)
go_on = True
while go_on:
    if n % 2 == 0:
        n=(n-2)//2
        N.append(n)
        
    elif n % 2 == 1:
        n=(n-1)//2
        N.append(n)
    elif n<=0:
        go_on = False

for i in range(len(N)):
    if N[i] % 2 == 0:
       o=m+o
       O.append(o)
       M.append(m)
    if N[i] % 2 == 1:
       m=o+m
       O.append(o)
       M.append(m)

for i in range(len(N)):

    if i < 10:
        print('{:d}:  n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i]))
    else:
        print('{:d}: n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i]))
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133286
 
1286 次点击  
文章 [ 1 ]  |  最新文章 3 年前
user2668284 user2668284
Reply   •   1 楼
user2668284 user2668284    3 年前

这可以简化为:

N, M, O = [1766445895], [1], [1]
n, m, o = N[0], M[0], O[0]

while n > 0:
    n = (n-2)//2 if n % 2 == 0 else (n-1)//2
    N.append(n)
    if n % 2 == 0:
        o += m
    else:
        m += o
    O.append(o)
    M.append(m)

for i, (_n, _o, _m) in enumerate(zip(N, O, M)):
    print(f'{i}:  n = {_n:10d}, q = {_o:6d}/{_m:6d}')