2015-11-14 2 views
0

Программа у меня довольно сложная, поэтому я решил принять эту порцию. В принципе, этот код должен проходить через ряд строк и останавливаться один раз TIME достиг 4800; однако, если quepax достиг 15 в цикле, он будет оценивать R. Если петля еще не разбита на TIME>=4800, последующие петли не получат новых значений R (так как quepax всегда будет более 15 оттуда), оставаясь при этом остальными линиями. Ниже приведена попытка сделать такую ​​программу. Это своего рода работа, но возможно ли сделать более простой код без повторения контента?Python: пропустить линии программирования на основе условия в цикле while?

while True: 
      i+=1 
      pax[i]=random.randint(1,5) 
      TOTALPAX+=pax[i] 
      TIME+=between[i] 
      queue+=pax[i] 
      if quepax>15: 
       R=i-1 
       while True: 
        i+=1 
        pax[i]=random.randint(1,5) 
        TOTALPAX+=pax[i] 
        TIME+=between[i] 
        queue+=pax[i] 
        if TIME>=4800: 
         break 
      if TIME>=4800: 
       break 
+0

Я бы, вероятно, не поместил это в вложенные петли. –

+0

Да, поэтому мне интересно, могу ли я сделать это без вложенного цикла. – txsaw1

+0

Чтобы «пропустить строки, заданные условием», вы должны выполнить условие «если нет»: '. Можете ли вы уточнить свою цель? Запишите именно то, что вы хотите, таким образом, чтобы не требовалось больше объяснений. Оттуда до кода это должен быть только небольшой шаг. – Jasper

ответ

0

Мне удалось найти это решение, которое устраняет повторяющиеся части, но оно все еще выглядит довольно нетрадиционным. Есть ли альтернатива этому?

run=0 
    while True: 
      i+=1 
      pax[i]=random.randint(1,5) 
      TOTALPAX+=pax[i] 
      TIME+=between[i] 
      queue+=pax[i] 
      if quepax>15 and run=0: 
       R=i-1 
       run=1 
      if TIME>=4800: 
      break 
+0

Если вы пытаетесь сделать что-то не более одного раза в цикле, нет никакого нетрадиционного использования для этого флага. Вы должны переименовать 'run' в нечто более значимое и использовать логические значения. Например: 'setR = True; ... если quepax> 15 и setR: R = i-1; setR = False' – Jasper

+0

Спасибо. Я просто пытался что-то придумать на месте, поэтому извиняюсь за это. Но я думаю, что это решило мою проблему. – txsaw1

+0

Это действительно выглядит странно для типичного кода Python со всем этим индексированием, но трудно сказать что-либо другое со всеми этими «дырами». 'quepax' никогда не изменяется в показанном коде, так что он всегда> 15 или никогда. 'queue' и' TOTALPAX' увеличиваются в синхронизации и не используются в этом цикле, поэтому вы можете добавить во временную переменную и добавить результат как после цикла. Вместо 'while' и приращения' i' вручную будет естественным выбором цикл 'for'. – BlackJack

Смежные вопросы