Schleife beenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
F_Wink
User
Beiträge: 11
Registriert: Sonntag 15. September 2019, 09:40

Hallo zusammen,
meine Frage ist vermutlich eine Lapalie aber ich stehe etwas auf dem Schlauch. Ansich funktioniert mein Code so wie gewünscht. Meine Formel wird berechnet, anschließend die Variablen wie angegeben erhöht, erneut berechnet usw. und alle Ergebnisse werden mir in der Kommandozeile untereinander ausgegeben. Zwar beendet das Programm die Ausgabe korrekt durch den break aber in der Kommandozeile sieht es so aus als ob das Skript noch läuft. Befehle sind erst nach manuellem stoppen wieder möglich. Habe ich irgendwo etwas übersehen wieso die Schleife unendlich ohne Ausgabe weiterläuft?
Dankeschön!

#Berechnung der Abstände


a = 0
b = 1
A = T.index[a,]
I = T.index[-1,]

while True:

for i in range(b, int(I+1)):
H = (math.sqrt(((T['X-Werte'][A])-(T['X-Werte']))**(2)+((T['Y-Werte'][A])-(T['Y-Werte']))**(2)))
H = ("%.3f" % H)
print (H)

if a != T.index[-1,]:
A += 1
b += 1
else:
break
F_Wink
User
Beiträge: 11
Registriert: Sonntag 15. September 2019, 09:40

Leider sieht man die Einzüge aus meinem Skript nicht....
Benutzeravatar
sparrow
User
Beiträge: 4231
Registriert: Freitag 17. April 2009, 10:28

Setz den Code in Code-Tags (erscheinen wenn man im vollständigen Editor den </> Knopf drückt. Dann bleiben die Einrückungen erhalten.
F_Wink
User
Beiträge: 11
Registriert: Sonntag 15. September 2019, 09:40

Code: Alles auswählen

#Berechnung der Abstände
    

a = 0
b = 1
A = T.index[a,]
I = T.index[-1,]
H=0

while True:

    for i in range(b, int(I+1)):
        H = (math.sqrt(((T['X-Werte'][A])-(T['X-Werte'][i]))**(2)+((T['Y-Werte'][A])-(T['Y-Werte'][i]))**(2)))
        H = ("%.3f" % H)
        print (H)

    if a != T.index[-1,]:
        A += 1
        b += 1
    else:
        break
nezzcarth
User
Beiträge: 1643
Registriert: Samstag 16. April 2011, 12:47

Zeig uns doch bitte das vollständige oder zumindest ein funktionierendes Skript. Hier fehlt zum Beispiel 'T'. Abgesehen davon ist der Code in der Form schwer lesbar. Variablen werden in Python per Konvention klein geschrieben (Großbuchstaben sind Konstanten vorbehalten) und sollten nach Möglichkeit auch sprechende Namen haben. Dass es etwa Klein- und Groß-A gibt, ist besonders verwirrend. Selbst wenn diese Variablenbenennung bei mathematischen Formeln so gängig ist, würde ich davon möglichst abraten.

Ich frage mich auch, welchen Datentyp 'T' hat und wundere mich, falls die ganzen Indexzugriffe und Methodenaufrufe wirklich so funktionieren. 'T.index[-1,]' sieht zum Beispiel schon sehr seltsam aus.
F_Wink
User
Beiträge: 11
Registriert: Sonntag 15. September 2019, 09:40

Hier dann mal der ganze Code, T ist ein Dataframe. Als Bild braucht man ein Bild auf dem Kreise erkannt werden sollen/können.
Habe teilweise ein # vor befehle gemacht. Nur damit ich sie "zuschalten" kann wenn benötigt.

Code: Alles auswählen

import cv2
import numpy as np
import pandas as pd
import math
from statistics import mean

# Bild einlesen und Bearbeiten
img = cv2.imread('Test2kopie.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

# Kreise erkennen
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
                           param1=20,param2=30,minRadius=0,maxRadius=100)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    
# Kreisumfang zeichnen
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# Kreiszentrum zeichnen
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255) ,3)
    
#Detektierte Kreise anzeigen
#cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

#Wertetabelle anzeigen
if circles is not None:
    circles = np.round(circles[0, :]).astype("int")  
    #umrechnung von Pixel in µm^2
    X = (circles*0.1075) #für quadirerung der tabelle**(2)
    T = pd.DataFrame(X)
    #Zeilen beschriften
    T.columns = ['X-Werte', 'Y-Werte', 'Radius']
    T['X-Werte'] = T['X-Werte'] - T['Radius']
    T['Y-Werte'] = T['Y-Werte'] - T['Radius']

#print (T)

#Berechnung der Abstände
    

a = 0
b = 1
A = T.index[a,]
I = T.index[-1,]
H=0

while True:

    for i in range(b, int(I+1)):
        H = (math.sqrt(((T['X-Werte'][A])-(T['X-Werte'][i]))**(2)+((T['Y-Werte'][A])-(T['Y-Werte'][i]))**(2)))
        H = ("%.3f" % H)
        print (H)

    if a != T.index[-1,]:
        A += 1
        b += 1
    else:
        break
Benutzeravatar
snafu
User
Beiträge: 6748
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du da innerhalb der letzten Schleife weder a noch T veränderst, bleibt das Ergebnis halt immer wahr und die Schleife kommt nie zum break.
Antworten