2017-08-03 2 views
0

Ich arbeite an meinem Code, wie ich mit der Schaltfläche Breite und dem Pixel berechnen, um es zusammen zu addieren, um den Wert zu erhalten. Ich versuche, den Wert mit der Liste zu vergleichen, wenn ich berechne, ob der Wert nahe, höher oder gleich ist. HierVergleiche den Wert mit der Liste

ist der Code:

CurrentRows = [375, 441, 507, 559, 610, 669, 724, 790, 838, 844, 849, 897, 910, 949, 959, 1009, 1016, 1018, 1019, 1072, 1125, 1138, 1184, 1186, 1189, 1238, 1246, 1286, 1419, 1620, 1762, 1840, 1943] 

nextprogram = int(program_id) + 1 
nextprogram1 = int(nextprogram) + 1 
nextprogram2 = int(nextprogram1) + 1 
nextprogram3 = int(nextprogram2) + 1 
program_button_1 = self.getControl(int(program_id)) 
program_button_2 = self.getControl(int(nextprogram)) 
program_button_3 = self.getControl(int(nextprogram1)) 
program_button_4 = self.getControl(int(nextprogram2)) 

width = program_button_1.getWidth() 
pos_X = pos_X + width + 5 

for pos_X1 in CurrentRows: 
    if pos_X1 >= pos_X: 
     pos_X = pos_X1 
     break 

program_button_2.setPosition(pos_X, pos_Y) 
width = program_button_2.getWidth() 
pos_X = pos_X + width + 5 

for pos_X1 in CurrentRows: 
    if pos_X1 >= pos_X: 
     pos_X = pos_X1 
     break 

program_button_3.setPosition(pos_X, pos_Y) 
width = program_button_3.getWidth() 
pos_X = pos_X + width + 5 


for pos_X1 in CurrentRows: 
    if pos_X1 >= pos_X: 
     pos_X = pos_X1 
     break 

Wenn die Variable pos_X den Wert zeigen 1194, die es nahe kommen, bis 1184, mag ich den Wert von 1184 aus der Liste bekommen. Wenn der Wert 1083 angezeigt wird, möchte ich 1073 aus der Liste abrufen, aber wenn der Wert 1125 anzeigt, der aus der Liste übereinstimmt, möchte ich 1125 aus der Liste abrufen.

Wie könnte ich das mit meinem Code tun?

+0

Werden CurrentRows immer in aufsteigender Reihenfolge sein? –

+0

ja ich denke schon? –

+0

Gibt es einen Grund 1194 1184, nicht 1189 geworden? Ich versuche, Ihre Kriterien zu verstehen –

Antwort

0

Es gibt mehrere Möglichkeiten, dies zu tun - ich listet nur ein paar auf. Die erste ist, was mein Lieblings-Weg wäre, es zu tun, aber es ist wahrscheinlich nicht die effizienteste, wenn das, was Sie sich Sorgen machen:

def highest(maximum): 
    return max([row for row in CurrentRows if row <= maximum]) 

Die nächste nutzt max auch sollte aber brauchen nur einen Durchgang zu tun über die Liste der Zeilen.

def highest(maximum): 
    return max(CurrentRows, key=lambda x: x if x <= maximum else 0) 

Wenn Sie aus irgendeinem Grund Sie nicht max mögen, können immer die Liste iterieren und für sich selbst überprüfen.

def highest(maximum): 
    best = 0 
    for x in CurrentRows: 
     if x > maximum: 
      return best 
     best = x 
    return best 
+0

vielen Dank, aber wie Ich kann sie ohne die Anruffunktion verwenden ?? –

+0

Wenn ich deine Frage verstehe, kannst du 'maximum' einfach durch die gewünschte Variable ersetzen und den Code aus dem Funktions-Wrapper ziehen. –

+0

Nein, ich habe gesagt, wie ich die Variable verwenden kann, um die Funktion aufzurufen, um den Rückgabewert zu erhalten? Beispiel: 'lookup = 1200 highest (lookup)'. Sie haben mir nicht den Beispielcode gegeben, mit dem ich die Funktion aufrufen könnte. –

Verwandte Themen