Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в Python

LimeDash Фамилия Ученик (100), открыт 2 недели назад
Я пытаюсь написать код, но он не рвботает.
Подскажите что делать.
def draw():
bg.draw()
if not gameover:
ship.draw()
for enemy in enemies:
enemy.draw()
if len(enemies) >= 16: <-- строка 37
fixer = enemies - 15
for i in range(fixer):
enemies.pop()
TypeError: unsupported operand type(s) for Sub: 'list' and 'int' on line 37
4 ответа
Леонид Мадиков Знаток (427) 2 недели назад
Ошибка в вашем коде возникает из-за попытки выполнить операцию вычитания между списком enemies и целым числом 15. В Python нельзя вычитать целое число из списка. Вместо этого вам нужно использовать длину списка для вычисления количества элементов, которые нужно удалить.

Вот исправленный код:
def draw():
bg.draw()
if not gameover:
ship.draw()
for enemy in enemies:
enemy.draw()
if len(enemies) >= 16:
fixer = len(enemies) - 15
for i in range(fixer):
enemies.pop()

В этом исправленном коде fixer вычисляется как разница между длиной списка enemies и числом 15. Это позволяет корректно определить количество элементов, которые нужно удалить из списка.
LimeDash ФамилияУченик (100) 2 недели назад
спасибо!
Леонтьев Михаил Гуру (3442) 2 недели назад
Ошибка возникает из-за этой строки:

```python
fixer = enemies - 15
```

В этой строке вы пытаетесь вычесть число (`15`) из объекта типа `list` (`enemies`), что недопустимо в Python. Чтобы исправить ошибку, нужно определить, сколько элементов необходимо удалить, основываясь на длине списка `enemies`.

### Исправленный код:
```python
def draw():
bg.draw()
if not gameover:
ship.draw()
for enemy in enemies:
enemy.draw()
if len(enemies) >= 16: # Проверяем длину списка enemies
fixer = len(enemies) - 15 # Вычисляем, сколько элементов нужно удалить
for i in range(fixer):
enemies.pop() # Удаляем лишние элементы из списка
```

### Объяснение изменений:
1. **`len(enemies)`** — используется для получения длины списка `enemies`.
2. **`len(enemies) - 15`** — вычисляет разницу между текущей длиной списка и максимально допустимым количеством элементов (15).
3. **`enemies.pop()`** — удаляет последний элемент списка. Если нужно удалять элементы с начала списка, используйте `enemies.pop(0)`.

Теперь код будет корректно работать. Если есть дополнительные вопросы, спрашивайте! ?
The_Jestel Ученик (180) 2 недели назад
Тут скорее ошибка в тебе
Похожие вопросы