2014-01-17 4 views
0

그래서이 모듈은 risar라고합니다. 그리고 그것이 무엇을하는지, 그립니다. 그러나 그것은 중요하지 않습니다. 나는 배경에 20 개의 꽃을 놓는이 코드를 썼다. 코드가 작동하지만 그것은 나에게 끔찍하게 어색해 보입니다. 나는 더 "환상적"으로 보일 수도 있고, 더 적은 루프가 사용될 수도있다. 저는 파이썬에 비교적 익숙합니다. 당신은 루프에서 그것을 제거 할 수 있도록, 당신은 같은 목록 5 회에 color 변수를 설정하는 우선 잘동일하지만 루프가 없음

import risar 
import random 


def makeFlowers(): 
    flowers = [] 
    for i in range(5): 
     colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"] 
     for j in range(4): 
      x = random.randint(20, (risar.maxX-20)) 
      y = random.randint(20, 300) 
      flower = risar.picture(x, y, colors[i]) 
      flowers.append(flower) 
    return flowers 

flowers = makeFlowers() 
+0

Factor out'colors'는 상수로 남아 있기 때문에. – arshajii

+5

이 질문은 코드 검토에 관한 것이므로 주제의 주제가 아닌 것으로 보입니다. 코드 검토 stackexchange 사이트 (http://codereview.stackexchange.com/)에 있어야합니다. –

+0

그 존재를 몰랐습니다. 저에게 알려 주셔서 감사합니다, 감사하고 그것을 확실히 사용할 것입니다! xD – Doe

답변

2

:

# Just set `colors` once 
colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg","green_flower.svg","purple_flower.svg"] 
for i in range(5): 
    # Do stuff 

둘째, 두 개의 루프를 사용하는 전혀 이유없이. 힌트 : 무엇이든 j을 사용하지 않으면 자체 루프가 필요하지 않을 수 있습니다.

대신에 반복 할 코드를 당긴 다음 여러 번 반복하십시오. 이 경우 코드 블록을 20 번 반복하고 싶지만 중첩 루프를 사용하여 색상을 순환 시키십시오. 대신, 당신이 그리고있는 꽃의 번호가 컬러리스트의 길이로 나눌 것을 알, 단일 루프 전체를 리팩토링 :

for i in range(20): 
    x = random.randint(20, (risar.maxX-20)) 
    y = random.randint(20, 300) 
    flower = risar.picture(x, y, colors[i//4]) # 0, 0, 0, 0, 1, 1, 1, 1, etc... 
    flowers.append(flower) 
+0

@ rekiem87 20- 항목 루프는 극히 미미합니다. 또한 OP는 파이썬 버전을 지정하지 않았고, 파이썬 3의'range'는 파이썬 2에서'xrange'처럼 작동합니다 (그리고'xrange'는 더 이상 존재하지 않습니다!). –

1

뭔가

colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"] 
for color in colors: 
    //You can do your second for here, no need to redeclare colors in each for, and color will be taking each value of the array 

그리고 단지

같은 한 가지 더, 당신은 더 나은 차이는 단지 시퀀스 생성기를 번호 목록을 생성하지 않기 때문에 그 xrange보다 효율적입니다

xrange(limit) 

를 사용,이 무거운 MEM에서 매우 중요하다 그림 1과 같은 ory 프로그램

관련 문제