Питон, убит? - PullRequest
       6

Питон, убит?

2 голосов
/ 27 октября 2011

ОК, так что я наконец-то начал с математики в python, что (на данный момент) на удивление не так сложно, как я думал, что это будет (я не знаю исчисления или тригонометрии и знаю только базовую алгебру),Я пытаюсь создать программу с нуля, которая учитывает квадратные уравнения.Вот что у меня есть (извините, если плохо написано):

def factor(arg):    
    o = arg
    n = o
    x = 2
    factors = [o]

    while abs(o) >= x:
        if (o) % x == 0:
            n = o / x
            factors.append(n)
            x += 1
        else:
            x += 1

    return factors

A = int(raw_input("What is A in your quadratic equation?   A = "))
B = int(raw_input("What is B in your quadratic equation?   B = "))
C = int(raw_input("What is C in your quadratic equation?   C = "))

Br = abs(B) + abs(A)            # Range of B
Bpf = range (-Br, Br + 1)       # Possible factors of B
ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ABpf:
    ACpf.append(-i) 

cf = []                          # Common factors

for i in Bpf:
    for j in ACpf:
        if i == j:
            cf.append(i)

print cf

Я запустил этот скрипт через терминал, он спросил меня, что такое AB и C, затем он завис на тридцать секунд.После того, как он разморозился ниже того, что я напечатал, он сказал «убит».Кто-нибудь знает, что вызвало это?Я ценю любые ответы или советы.

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Похоже, проблема в следующих строках:

ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ABpf:
    ACpf.append(-i) 

Попробуйте вместо этого:

ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ACpf[:]:               # Loop over a copy of ACpf
    ACpf.append(-i) 

Для копирования списка используется нотация [:].Это гарантирует, что вы не изменяете список (не увеличиваете его) во время циклического перемещения по нему.

Также приведена небольшая очистка кода для factor ():

def factor(arg):
    o = arg
    factors = [o]

    for x in range(2, o+1):
        if o % x == 0:
            n = o // x
            factors.append(n)

    return factors
1 голос
/ 27 октября 2011

Измените ваш код примерно так:

def factor(arg):    
    o = arg
    n = o
    x = 2
    factors = [o]

    while abs(o) >= x:
    if (o) % x == 0:
        n = o / x
        factors.append(n)
        x += 1
    else:
        x += 1

    return factors

A = int(raw_input("What is A in your quadratic equation?   A = "))
B = int(raw_input("What is B in your quadratic equation?   B = "))
C = int(raw_input("What is C in your quadratic equation?   C = "))

Br = abs(B) + abs(A)            # Range of B
Bpf = range (-Br, Br + 1)       # Possible factors of B
ABpf = factor(A * C)            # Possible factors of (A * C)
ACpf = []
for i in ABpf:
    ACpf.append(i)
    ACpf.append(-1*i) 

cf = []                          # Common factors

for i in Bpf:
    for j in ACpf:
    if i == j:
        cf.append(i)

print cf

Теперь попробуйте запустить его. Вы должны получить результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...