2017-12-21 10 views
-1

文字列の最後に数字を使用する変数がいくつかあります。しかし、 "i"はstr関数を使うと文字列に変換されないようです。なぜこれが起こっているのでしょうか?変数のためにintの範囲を文字列に変換するにはどうすればよいですか?

コード:

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

'GroupConnection1'、' GroupConnection2'、および 'GroupConnection3'をリストに置き換えてください。 – Galen

+0

[動的名を持つ変数の値へのアクセス]の可能な複製(https://stackoverflow.com/questions/29177693/access-to-value-of-variable-with-dynamic-name) – Barmar

答えて

2

(主に、下記参照)私はあなたが行うにをしようとしているかを見るが、あなたがそれを行うことはできません。書かれたとして、あなたのコードのデ糖:has_GroupConnection以来

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

は、あなたのプログラムで定義されていない、これは動作しません、代わりにNameErrorがスローされます。あなたはそれを定義することもできます。

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])) 

私の最初の文は単純化しすぎている、あなたはそれがevalまたはlocals()を使用して行うことができますが、それは悪いアイデアだので、私はそれを行う方法をお見せず、強く、あなたを戒めますそうしないで!それは、醜い非効率的、かつひどいコードのにおいだ(そして、あなたはそれをグーグルについて考えるためにあなた自身を恥じるべきである!)

+0

@TomKarzesは固定されています私が考えていた。 –

0

これは、あなたが探しているものです:

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

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

出力は次のとおりです。

45 
88 
55 

has_GroupConnectionGroupConnectionの両方が[]とそれらへのインデックスの両方になりましリストであるので、あなた。ループを0から2に変更しました。元のループは1から2まで実行されました。不要なものも削除しました。ここで

1

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])) 

出力

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

をタプルを使用してリストを使用して別の方法ですこれは、あなたの問題にアプローチする「」方法でしょう。

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

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

私は、あなたが鍵を巡回何の問題もないよ(「は」と「接続」の属性のネストされた)これらの値を格納するため、ここで辞書の使用を検討したいです。

あなたが特定の番号を含める必要がある場合は、文字列置換を使用:範囲内のiについて

を(1,3):

しばらく接続-dictの[ 'GroupConnection%s' は%STR(I )] [] 'は'

プリント(辞書[ 'GroupConnection%S' %STR(I)] [ 'CONN-番号'])

0

構文[]がAN内の要素を指定するために使用されリストや文字列のように反復可能であるか、またはdictから値を取得します。変数を識別するためにそれを使用しようとしていますが、それは機能しません。あなたは、おそらく代わりに、dictを使用する必要があります。

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

その後、あなたは自分のGroupConnection秒のすべてを取得するためにdictのキーを反復処理することができます

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

それともdict.items()メソッドを使用できます。

for grp_number, connection in group_connections.items(): 
    if connection: 
     print(connection) 

データのあなたの2枚が関連しているので、それは彼らがに関連しているので、それらを一緒に保つために、より理にかなっていますいくつかのファッション。

関連する問題