Как обработать ситуацию, если индекс превышает длину строки в коде?

Как прописать 4 условия так, чтобы функция возвращала False, если хотя бы одно из следующих условий истинно:

1. Длина извлекаемой подстроки отрицательна.
2. Заданный индекс отрицателен.
3. Заданный индекс выходит за границу всей строки.
4. Сумма длины подстроки и заданного индекса выходит за границу всей строки.

Дан код:

```python
def f(string, index, length):
    if length < 0:
        return 'False'
    if index < 0:
        return 'False'
    if index > len(string) - 1:
        return 'False'
    if length + index > len(string):
        return 'False'
    return 'True'
string = 'Winter is comming'
print(f(string, 4, length=4))
Сейчас 3 if оператора не корректны.
  • 31 января 2024 г. 13:38
Ответы на вопрос 2
Ваш код уже почти правильно проверяет условия, которые вы перечислили. Тем не менее, есть некоторые незначительные неточности, которые надо исправить. Вот как следует модифицировать ваш код:

```python
def f(string, index, length):
    # 1. Длина извлекаемой подстроки отрицательна.
    if length < 0:
        return False
    # 2. Заданный индекс отрицателен.
    if index < 0:
        return False
    # 3. Заданный индекс выходит за границу всей строки.
    if index >= len(string):  # Если индекс равен len(string), 
                              # он тоже вне границ строки
        return False
    # 4. Сумма длины подстроки и заданного индекса выходит за границу всей строки.
    if index + length > len(string):
        return False
    return True

string = 'Winter is coming'
print(f(string, 4, length=4))  # Возвращает True
```

Изменения:

- Использованы булевы значения `True` и `False` вместо строк 'True' и 'False'.
- Условие для проверки выхода индекса за границу строки изменено на `index >= len(string)` (вместо `index > len(string) - 1`). Это исправление позволяет учесть случай, когда `index` равен длине строки, что тоже является выходом за границы строки.
- В последнем условии (условие 4) избыточная операция вычитания (1) убрана, так как сравнение и так производится в нужном "направлении".

Функция `f()` теперь возвращает булево значение `True`, если ни одно из условий не нарушено, и `False`, если хотя бы одно из условий верно.
def f(string, index, length):
    return not (length < 0 or index < 0 or index >= len(string) or length + index > len(string))

string = 'Winter is coming'

print(f(string, 4, 4))
# True

print(f(string, 4, -1))
# False

print(f(string, -1, 4))
# False

print(f(string, len(string), 4))
# False

print(f(string, len(string) - 3, 5))
# False
Похожие вопросы