2013-05-22 4 views
3

체크 표시가되면 일련의 텍스트가 표시되도록하는 간단한 값 (a, b, c 등)이있는 일련의 확인란이 있습니다. 문제는 내가 많은 수의 체크 박스를 가지게 될 것이고, 각 체크 박스에 대해 아래의 코드를 수동으로 반복하면 난장판이 될 것이라는 것이다. 나는 여전히 파이썬을 배우고 있으며 이것을 실현하기위한 루프를 만드는 데 어려움을 겪고있다. 여기파이썬 루프를 만들 때 문제가 발생했습니다.

내 전류 (작업하지만, 바람직하지 않은) 코드입니다 :

if a: 
a = 'foo' 
if b: 
b = 'bar' 
... 

아무것도로 box을 반환하는 루프에서 내 시도 : 내 루프를 얻기 위해 무엇을해야

boxes = [a, b, c, ...] 

texta = 'foo' 
textb = 'bar' 
... 

for box in boxes: 
if box: 
    box = ('text=%s', box) 

제대로 작동합니까? 감사!

답변

4

방법에 대해 :

mydict = {a:'foo', b:'bar', c:'spam', d:'eggs'} 

boxes = [a, b, c] 

for box in boxes: 
    print('text=%s' % mydict[box]) 
+0

완벽한, 고마워! 절대로 사전 경로를 생각하지 않았을 것입니다 ... –

1

작동하지 않습니다. 목록의 실제 위치가 아니라 루프의 로컬 변수에 할당하는 것입니다. 이 시도 :

boxes = [a, b, c, ...]     # boxes and texts have the same length 
texts = ['texta', 'textb', 'textc', ...] # and the elements in both lists match 

for i in range(len(boxes)): 
    if boxes[i]: 
     boxes[i] = texts[i] 
+0

또는'상자, 우편 텍스트 (상자, 텍스트) : ' –

1

현재 zip()enumerate()을 사용해야합니다

boxes = [a, b, c, ...] 
texts = ['texta', 'textb', 'textc', ...] 

for i,(x,y) in enumerate(zip(boxes,texts)): 
    if x: 
     boxes[i] = y 
0
a,b,c = (1,0,11) 
boxes = {a:'foo', b:'bar', c:'baz'} 
for b in ["text=%s" % boxes[b] for b in boxes if b]: 
    print b 
관련 문제