Это потому, что вы одновременно читаете и изменяете список, предотвращая обход каждого элемента.weapon.strip('\n')
Для оружия с '\ n' в конце никогда не достигается *1001* Чтобы очистить его, устраните проблему обхода и избавьтесь от новых пробелов, попробуйте что-то вроде этого ответ:
print("Taking weapons from Weapon shack")
with open("weapons.list") as ws:
readWeapons = ws.readlines()
for weapon in readWeapons:
weapon = weapon.rstrip('\n')
weapons.append(weapon)
print(weapons)
Редактировать:
Чтобы ответить на ваше пояснение, это из-за того, как работает цикл for в python.Я не знаком с точными деталями, но похоже, что цикл for фактически обращается к массиву в режиме реального времени, а не читает весь массив сразу.Проверьте это чтение из test.list, который содержит четыре строки, соответствующие AD:
print("Taking item from test\n")
with open("test.list",'r') as ws:
elements = ws.readlines()
print(elements)
print()
for element in elements:
print('Current element: ' + element)
elements.remove(element)
print('Element pre-strip: ' + str(elements))
element = element.strip('\n')
print('Stripped element: ' + element)
elements.append(element)
print('Element list post-strip: ' + str(elements))
Вывод:
Taking item from test
['A\n', 'B\n', 'C\n', 'D\n']
Current element: A
Element pre-strip: ['B\n', 'C\n', 'D\n']
Stripped element: A
Element list post-strip: ['B\n', 'C\n', 'D\n', 'A']
Current element: C
Element pre-strip: ['B\n', 'D\n', 'A']
Stripped element: C
Element list post-strip: ['B\n', 'D\n', 'A', 'C']
Current element: A
Element pre-strip: ['B\n', 'D\n', 'C']
Stripped element: A
Element list post-strip: ['B\n', 'D\n', 'C', 'A']
Current element: A
Element pre-strip: ['B\n', 'D\n', 'C']
Stripped element: A
Element list post-strip: ['B\n', 'D\n', 'C', 'A']
Из-за добавления, а не добавления, каждый другой элемент находится в процессепропускается при перемещении цикла for из индекса a массива в индекс a + 1 массива.Это приводит к тому, что B и D (индексы 1 и 3) пропускаются, а A читается 3 раза.