2017-05-19 20 views
-1

2次多項式をチェックしてプロットするプログラムを作成しました。私たちがちょうど1つの関数を使用するとうまくいきましたが、それをいくつかの小さな関数に分割した後、Pythonシェルは常に「コードが不完全で実行できませんでした」と言います。 しかし、これを引き起こす可能性のある間違いを見つけることはできません。Python不完全コード

import matplotlib as mp 
mp.use("Qt4Agg") 
import numpy as np 
import matplotlib.pyplot as plt 
import warnings as wn 


p = 0 
q = 0 
num = False 
a = False        # Wir gehen am Anfang davon aus,  dass beide Nullstellen komplex sind. 
b = False 
l1 = [] 



def pq(p,q):       # pq bekommt zwei Eingaben, mit den er die Funktion definiert 
s = p/2 
pp = -s 
r = s ** 2 - q 
if (r >=0): 
    a = True 
    b = True 
    x_01=pp+np.sqrt(r)     # Nullstellen werden mithilfe der p-q-Formel berechnet 
    x_02=pp-np.sqrt(r) 
else: 
    with wn.catch_warnings(): 
     wn.simplefilter("ignore") 
     pp=complex(pp) 
     r=complex(r) 
     x_01=pp+np.sqrt(r)     # Nullstellen werden mithilfe der p-q-Formel berechnet 
     x_02=pp-np.sqrt(r) 
l1.append(x_01) 
l1.append(x_02) 
print([x_01,x_02]) 
return(a,b,x_01,x_02) 

def check(x_01, x_02): 
if (x_01 == x_02): 
    print("Die reelle Nullstelle "+str(x_01)+" liegt doppelt vor") 
elif (a and b): 
    print("Es liegen die 2 verschiedenen reellen Nullstellen "+str(x_01)+" und "+str(x_02)+" vor.") 
else: 
    print("Es liegen die 2 verschiedenen komplexen Nullstellen "+str(x_01)+" und "+str(x_02)+" vor.") 
return(x_01,x_02) 

def chart1(p, q, x_01, x_02): 
x=np.linspace(-5,5,100)   # Funktion wird von -10 bis 10 geplottet 
y=(x**2+p*x+q) 
plt.plot(x,y) 
if (a == True): 
    plt.plot(x_01,0,"or") 
if (b == True): 
    plt.plot(x_02,0,"or") 
plt.show() 
plt.savefig("HA_Diagramm.png") 
return 1 

while (num == False): 
try: 
    p=float(raw_input("Was soll Dein p sein? ")) 
    q=float(raw_input("Was soll Dein q sein? ")) 
    l1.apppend(p) 
    l1.apppend(q) 
    num = True 
except ValueError: 
    print ("Geben Sie einen numerischen Wert ein. ") 
except KeyboardInterrupt: 
    print("Ich habe noch gearbeitet, bitte geben Sie eine neue Zahl ein.") 


def work(p,q): 
pq(p,q) 
print (l1) 
return 1 

a = work(p,q) 
+2

インデントを修正してください – DavidG

答えて

0

インデントを修正してコマンドのスペルを修正した場合、プログラムは正常に動作するはずです。

import matplotlib as mp 
mp.use("Qt4Agg") 
import numpy as np 
import matplotlib.pyplot as plt 
import warnings as wn 


p = 0 
q = 0 
num = False 
a = False        
b = False 
l1 = [] 



def pq(p,q):       
    s = p/2 
    pp = -s 
    r = s ** 2 - q 
    if (r >=0): 
     a = True 
     b = True 
     x_01=pp+np.sqrt(r)     
     x_02=pp-np.sqrt(r) 
    else: 
     with wn.catch_warnings(): 
      wn.simplefilter("ignore") 
      pp=complex(pp) 
      r=complex(r) 
      x_01=pp+np.sqrt(r)     
      x_02=pp-np.sqrt(r) 
    l1.append(x_01) 
    l1.append(x_02) 
    print([x_01,x_02]) 
    return(x_01,x_02) 

def check(x_01, x_02): 
    if (x_01 == x_02): 
     print("Die reelle Nullstelle "+str(x_01)+" liegt doppelt vor") 
    elif (a and b): 
     print("Es liegen die 2 verschiedenen reellen Nullstellen "+str(x_01)+" und "+str(x_02)+" vor.") 
    else: 
     print("Es liegen die 2 verschiedenen komplexen Nullstellen "+str(x_01)+" und "+str(x_02)+" vor.") 
    return(x_01,x_02) 

def chart1(p, q, x_01, x_02): 
    x=np.linspace(-5,5,100)   # Funktion wird von -10 bis 10 geplottet 
    y=(x**2+p*x+q) 
    plt.plot(x,y) 
    if (a == True): 
     plt.plot(x_01,0,"or") 
    if (b == True): 
     plt.plot(x_02,0,"or") 
    plt.show() 
    plt.savefig("HA_Diagramm.png") 
    return 1 

while (num == False): 
    try: 
     p=float(raw_input("Was soll Dein p sein? ")) 
     q=float(raw_input("Was soll Dein q sein? ")) 
     l1.append(p) 
     l1.append(q) 
     num = True 
    except ValueError: 
     print ("Geben Sie einen numerischen Wert ein. ") 
    except KeyboardInterrupt: 
     print("Ich habe noch gearbeitet, bitte geben Sie eine neue Zahl ein.") 


def work(p,q): 
    pq(p,q) 
    print (l1) 
    return 1 

a = work(p,q)