2017-12-21 5 views
-1

Also habe ich ein paar Variablen, die Zahlen am Ende der Zeichenfolge verwenden. Aber das "i" scheint nicht in eine Zeichenkette zu konvertieren, wenn ich eine str-Funktion verwende. Irgendeine Idee warum das sein könnte?Wie kann ich einen Bereich von Ints in Strings konvertieren, die für Variablen verwendet werden?

Code:

has_GroupConnection1 = True 
has_GroupConnection2 = True 
has_GroupConnection3 = True 

GroupConnection1 = 45 
GroupConnection2 = 88 
GroupConnection3 = 55 

for i in range(1,3): 
    if str(has_GroupConnection[i]) == True: 
     print(str(GroupConnection[i])) 
+0

Ersetzen Sie 'GroupConnection1',' GroupConnection2' und 'GroupConnection3' durch eine Liste. – Galen

+0

Mögliches Duplikat von [Zugriff auf Wert der Variablen mit dynamischem Namen] (https://stackoverflow.com/questions/29177693/access-to-val-of-variable-with-dynamic-name) – Barmar

Antwort

2

Ich sehe, was du bist versuchen, zu tun, aber man kann es nicht tun (vor allem, siehe unten). Ihr Code als geschriebenes de-Zucker:

has_GroupConnection.__getitem__(i) 
# foo[x] -> foo.__getitem__(x) 

seit has_GroupConnection ist in Ihrem Programm definiert, das wird nie funktionieren und stattdessen ein NameError werfen. Sie könnten es jedoch definieren.

has_GroupConnection = [] 
has_GroupConnection.append(None) # 0th element 
has_GroupConnection.append(True) # 1st element 
has_GroupConnection.append(True) # 2nd element 
has_GroupConnection.append(True) # 3rd element 
# or indeed has_GroupConnection = [None, True, True, True] 
# or a dict will work, too... 

# as above... 
GroupConnection = [None, 45, 88, 55] 

for i in range(1,3): # note this is only [1, 2], not [1, 2, 3] 
    if has_GroupConnection[i]: 
     print(str(GroupConnection[i])) 

Mein erster Satz ist eine grobe Vereinfachung, Sie können tun es eval oder locals() verwenden, aber es ist eine schlechte Idee, so werde ich Ihnen nicht zeigen, wie das zu tun, und Sie werden stark ermahnen nicht zu tun! Es ist hässlich, ineffizient und ein schrecklicher Code Geruch (und Sie sollten über googeln sie sich schämen zu denken!)

+0

@TomKarzes behoben, weiß nicht was Ich dachte. –

0

Dies ist, was Sie suchen:

has_GroupConnection = [True] * 3 
GroupConnection = [45, 88, 55] 

for i in range(3): 
    if has_GroupConnection[i]: 
     print(GroupConnection[i]) 

Die Ausgabe lautet:

45 
88 
55 

beide has_GroupConnection und GroupConnection sind jetzt beide Listen, so dass Sie einen Index in ihnen mit []. Ich änderte die Schleife, um von 0 bis 2 zu laufen. Die ursprüngliche Schleife lief von 1 bis 2. Ich beseitigte auch einige unnötige Dinge.

1

Hier ist eine weitere Möglichkeit, Listen mit einem Tupel mit

group_connection = list() 
group_connection.append((True, 45)) 
group_connection.append((True, 88)) 
group_connection.append((True, 55)) 

for i in range(0,len(group_connection)): 
    if (group_connection[i][0] == True): 
     print(str(i) + " has the connection number " + str(group_connection[i][1])) 

Ausgänge

0 has the connection number 45 
1 has the connection number 88 
2 has the connection number 55 
0

Dies wäre "ein" Weg, um Ihr Problem zu nähern.

has_connections = [True, True, False] 
group_connections = [45, 88, 55] 

for h, g in zip(has_connections, group_connections): 
    if h: 
     print(g) 
0

würde ich die Verwendung eines Wörterbuchs hier zum Speichern dieser Werte (verschachtelt für die ‚hat‘ und ‚Verbindung‘ Attribute) prüfen, wie dann werden Sie kein Problem haben, die Schlüssel Radfahren durch.

Wenn Sie die spezifischen Zahlen enthalten müssen, einen String Ersatz verwenden:

for i in range (1,3):

während verbindungs ​​dict [ 'GroupConnection% s' % str (i)] [ 'besitzt']:

print (dict [ 'GroupConnection% s' % str (i)] [cONN-number '])

0

die Syntax [] verwendet, um ein Element in einem spezifizieren iterierbar, wie eine Liste oder eine Zeichenfolge, oder um einen Wert von einer dict abzurufen. Sie versuchen, es zu verwenden, um eine Variable zu identifizieren, aber das wird nicht funktionieren.Sie sollten wahrscheinlich ein dict, statt:

group_connections = { 
    1 : None, 
    2 : 45, 
    3 : 88, 
    4 : 55  
} 

Dann können Sie einfach durch die alle Ihre GroupConnection s dict ‚s Schlüssel iterieren zu erhalten:

for grp in group_connections: 
    if group_connections[grp]: 
     print(group_connections[grp]) 

Oder Sie könnten die dict.items() Methode verwenden:

Da Ihre beiden Daten miteinander verwandt sind, ist es sinnvoller, sie zusammenzuhalten, damit sie miteinander in Beziehung stehen etwas Mode.

Verwandte Themen