2016-05-16 2 views
-2

У меня проблема при вызове моей функции, я получаю плохой результат, как я объясню позже в тексте.Исключения и выходные данные

Это те ресурсы, я работаю с:

Main_Building=[10,12,14,17,21,25,30,36,43,52,62,74,89,107,128,154,185,222,266,319,383,460,552,662,795,954,1145,1374,1648,1978] 
Barracks=[16,19,23,28,33,40,48,57,69,83,99,119,143,171,205,247,296,355,426,511,613,736,883,1060,1272] 
Stables=[20,24,29,35,41,50,60,72,86,103,124,149,178,214,257,308,370,444,532,639] 
Workshop=[24,29,35,41,50,60,72,86,103,124,149,178,214,257,308] 
Blacksmith=[19,23,27,33,39,47,57,68,82,98,118,141,169,203,244,293,351,422,506,607] 
Market=[10,12,14,17,21,25,30,36,43,52,62,74,89,107,128,154,185,222,266,319,383,460,552,662,795] 
Axe=[6,7,9,10,12,15,18,21,26,31,37,45,53,64,77,92,111,133,160,192,230,276,331,397,477,572,687,824,989,1187] 
Clay_Pit=[6,7,9,10,12,15,18,21,26,31,37,45,53,64,77,92,111,133,160,192,230,276,331,397,477,572,687,824,989,1187] 
Mine=[6,7,9,10,12,15,18,21,26,31,37,45,53,64,77,92,111,133,160,192,230,276,331,397,477,572,687,824,989,1187] 
Settler_House=[5,6,7,9,10,12,15,18,21,26,31,37,45,53,64,77,92,111,133,160,192,230,276,331,397,477,572,687,824,989] 
Warehouse=[6,7,9,10,12,15,18,21,26,31,37,45,53,64,77,92,111,133,160,192,230,276,331,397,477,572,687,824,989,1187] 
Wall=[8,10,12,14,17,20,24,29,34,41,50,59,71,86,103,123,148,177,213,256] 

Вот мой код:

def buildings(points): 
    for i in range(0,30): 
     try: 
      if Main_Building[i]>=points: 
       del Main_Building[i:] 
      if Barracks[i]>=points: 
       del Barracks[i:] 
      if Stables[i]>=points: 
       del Stables[i:] 
      if Workshop[i]>=points: 
       del Workshop[i:] 
      if Blacksmith[i]>=points: 
       del Blacksmith[i:] 
      if Market[i]>=points: 
       del Market[i:] 
      if Axe[i]>=points: 
       del Axe[i:] 
      if Clay_Pit[i]>=points: 
       del Clay_Pit[i:] 
      if Mine[i]>=points: 
       del Mine[i:] 
      if Settler_House[i]>=points: 
       del Settler_House[i:] 
      if Warehouse[i]>=points: 
       del Warehouse[i:] 
      if Wall[i]>=points: 
       del Wall[i:]     
     except IndexError: 
      continue 

Проблема заключается в том, когда речь идет условие Кузнеца, он смотрит на меня, как условие только передается, и то же самое для других, продолжающих состояние стены. Условие определяет, где остановиться и удалить остальную часть списка для дальнейшего использования. Списки имеют разную длину, поэтому я использовал простое исключение, когда оно выходит за пределы диапазона, оно просто пропускает и переходит к следующему условию.

Предложенное выход при Защиту зданий (100):

Blacksmith=[19,23,27,33,39,47,57,68,82,98] 

Фактический выход весь список без каких-либо изменений. То же самое относится к продолжающемуся состоянию.

Что я пробовал:

  1. Я попытался перезагрузить Python, но, к сожалению, не так.

  2. Если я ошибочно набрал имя переменной.

  3. Повторный интервал при каждом состоянии.

Может быть решение, но не эффективно, добавив к каждому условию исключение? (Не очень хорошая идея на мой взгляд).

Почему это пропускает условия?

Благодарим за помощь и время.

ответ

0

Continue вернется к началу текущего цикла и захватить следующий индекс. Это означает, что если ошибка произошла на полпути, последняя половина пропускается. Это было довольно долго. Вот мое решение.

data = [Main_Building, Barracks, Stables, Workshop, Blacksmith, Market, Axe, Clay_Pit, Mine, Settler_House, Warehouse, Wall] 
def buildings(points): 
    for building in data: # loop through each building seperately, shortens code and removes arbitrary loop number 
     for point in building: # loop through each buildings index, same as your code 
      if point >= points: 
       del building[building.index(point):] 
buildings(20) 
print data 
+0

Спасибо, сейчас я получаю. Какая ужасная ошибка, которую я совершил. –

0

Если произошла ошибка между try-except, Python будет проходить или продолжать все коды между try-except.

try: 
    a = int(input("integer: ")) 
    print("print this") 
    print("print that") 
except: 
    pass 

Выход:

>>> 
integer: ab 
>>> 

Смотрите, print this и print that не печатается. Вы должны поймать ошибки один за другим.

try: 
    a = int(input("integer: ")) 
except: 
    pass 
print("print this") 
print("print that") 

>>> 
integer: ab 
print this 
print that 
>>> 
Смежные вопросы