저는 파이썬에서 루프 반복 계산에 대한 간단한 질문을 가지고 있습니다. 나는 각 반복마다 "나이 드는"객체를 만들었지 만 특정 나이에 "죽는다"고 가정되는 객체를 만들었지 만, 때로는 상당히 오래 살기도합니다.루프 반복 계산 (Python)
이def reproduce():
class Offspring(Species):
def __init__(self,name,life,attack,move,location,status,species,age):
area = 1000
self.name = name
self.life = life
self.attack = attack
self.move = move
self.location = [random.randint(1,area),random.randint(1,area)]
self.status = 1
self.species = 'simple'
self.age = 1
for z in [y for y in petri_dish if y.status == 1 and y.life >= 50 and y.species == 'simple']:
petri_dish.append(Offspring('g' + str(turn/250)+'#'+str(z.name),(random.randint(int(z.life/2),z.life)),(random.randint(int(z.attack/2),z.attack)),(random.randint(int(z.move/2),z.move)),0,1,0,0))
print 'g' + str(turn/250)+'#'+str(z.name), 'was born.'
def move_around():
for x in list(petri_dish):
x.age += 1
if x.status == 0 or (x.species == 'species' and x.age >= 750) or (x.species == 'predator' and x.age >= 3000):
print str(x.name) + ' expired. Cells left: ' + str(len(petri_dish))
petri_dish.remove(x)
else:
x.relocate()
x.target()
if len(petri_dish) >= 75:
for x in list(petri_dish):
if x.life < int(turn/25):
x.status = 0
if turn % 250 == 0:
reproduce()
while len([y for y in petri_dish if y.status == 1]) > 1:
turn += 1
move_around()
후손 클래스는 simple
종 및 연령 750 또는 이상 죽을 - 이상적으로 750 정확히, 그러나 그것은 문제의 일부 : 여기 내 프로그램의 코드 조각입니다. 개체 목록 (petri_dish
)을 반복하는 방법을 알아 내지 못했고 반복의 어느 시점에서든지 status = 0
(죽었음)인지 또는 충분히 오래되었는지 여부에 관계없이 특정 개체를 제거합니다.
죄송하지만이 질문이 단순한 질문이지만 루프가 내게 적합하지 않은 경우 ... 필자는 독해력 등을 읽었지만 추가 자료는 인정 될 것입니다. 내 질문에 대한 답변은 말할 것도없고! 감사합니다.
은 글로벌 변수를'turn'합니까? 또한 문제를 재현하는 데 필요한 최소한의 코드로 코드를 축소 할 수 있습니까? 현재 코드에서 관련 줄을 지적하지 않았습니다. –
'x.species == 'species'와 x.age> = 750'을 테스트하고 있지만 클래스에''simple''로 설정되어있는 것 같습니다. 시험의이 부분은 항상 실패 할 것 같습니다. 부가 메모 : 일부 코드는 길어서 코드를 읽기가 어렵게 만듭니다. 또한 반복적으로 호출되는 함수에서 클래스를 작성합니다. 그 수업이 최상위 레벨에 살기를 원하지 않습니까? –
감사합니다 스티븐! 그건 내 바보 같은 실수 였어. 코드를 수정하고 Offspring 클래스를 최상위 레벨로 이동해 보겠습니다. 엄청 고마워! – userNaN