В то время как циклы внутри if-оператора? - PullRequest
0 голосов
/ 08 января 2019

Программист для начинающих здесь :)) Я работаю над школьным проектом, задачей которого является найти корни пяти функций в одном файле.

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

Просто спросите, есть ли что-то странное;)

def b(x: float):
    return -x**2+x+6

def bgraf():
    xlim(a1, b1)
    ylim(-15, 25)
    x = linspace(-5, 10, 1000)
    y = b(x)
    plot(x, y, 'r')
    return

funksjoner = [0, 1, 2, 3, 4]

while response not in funksjoner:
    i = int(input("choose a function from 0 to 4"))
    response = i
    if response in funksjoner:
        print("you chose function ", int(funksjoner[i]))

a1 = float(input())
b1 = float(input())
z = a1
y = b1
m = a1
n = b1
NP = True

if int(funksjoner[i]) == funksjoner[1]:
    while abs(y-z) > 1e-10:
        null1 = (z+y)/2
        if b(z)*b(null1)>0 and b(y)*b(null1)>0: 
            NP = False
            print('No roots in this interval')
            bgraf()
            break
        elif b(null1) == 0:
            break
        elif b(z)*b(null1)>0:
            z = null1
        else :
            y = null1
    while abs(n-m) > 1e-10:
        null1_2 = (m+n)/2
        if b(m)*b(null1_2)>0 and b(n)*b(null1_2)>0: 
            NP = False
            print('No roots in this interval')
            bgraf()
            break
        elif b(null1_2) == 0:
            break
        elif b(m)*b(null1_2)>0:
            m = null1_2
        else :
            n = null1_2
    if NP :
        print('we have a root when x =', round(((z+y)/2), 1))
        if null1 != null1_2:
            print('and when x =', round(((m+n)/2), 1))
        bgraf()
        scatter(null1, 0)
        if null1 != null1_2:
            scatter(null1_2, 0)

Похоже, что python игнорирует второй цикл while, который я поместил под оператором if. Есть ли другой способ, которым я мог это сделать?

Спасибо за внимание!

1 Ответ

0 голосов
/ 09 января 2019

Несколько вещей для размышления:

  1. что вы хотите достичь с помощью следующей строки кода: Если int (funksjoner [i]) == funksjoner [1] Вы можете просто проверить Если я == 1

  2. Я не вижу никакой разницы между первым и вторым циклом while. г = т = а1 у = п = а2 Так в чем же разница между этими двумя?

  3. В общем случае код трудно читать из-за именования переменных, попробуйте использовать переменные, которые дают вам представление о том, что они содержат.

  4. Чтобы получить лучшее представление о том, что происходит в вашем коде, либо используйте отладку, либо, если вы не знакомы с отладкой, добавьте операторы print в свой код, чтобы лучше понять, что хранится в ваших переменных и в какое время выполнения , И какие операторы выполняются, а какие пропускаются / не достигаются

Когда вы дадите нам более подробную информацию о своем коде (например, вы можете добавить комментарии для объяснения вашего кода), задайте более подробные вопросы, чтобы мы могли лучше вас поддержать

...