Как я могу преобразовать свой код цикла for в цикл while в Python?

#python #for-loop #while-loop

#python #for-loop #цикл while

Вопрос:

Я пытаюсь написать функцию с именем has_no_e, которая принимает строку в качестве аргумента и возвращает False, если строка содержит букву e, и True, если строка не содержит букву e.

Я написал функцию, используя цикл for, но мне не удается написать аналогичную функцию, которая выполняет то же самое, используя цикл while.

Вот моя функция с циклом for:

 def has_no_e(word):
    for letters in word:
        if letters == "e":
            return False
    return True
 

И функция, которую я написал,:

 def has_no_e2(word):
    index = 0
    while index < len(word):
        if word[index] != "e":
            index  = 1
        return False
    return True
 

Можете ли вы сказать мне, что не так с моей функцией с циклом while? Он возвращает False каждый раз, независимо от того, есть «e» или нет.

Ответ №1:

Для этого есть два способа реализовать одно и то же исправление. Тот, который более тесно связан с вашим существующим кодом, это

 def has_no_e2(word):
    index = 0
    while index < len(word):
        if word[index] != "e":
            index  = 1
            continue  # skip the rest of the loop and go back to the top
        return False
    return True
 

Лучший вариант

 def has_no_e2(word):
    index = 0
    while index < len(word):
        if word[index] == "e":
            return False
        index  = 1
    return True
 

Обратите внимание, что следующие две части кода примерно эквивалентны:

 for elem in iterable:
    # code

_index = 0
while _index < len(iterable):
    elem = iterable[_index]
    # code
    _index  = 1
 

Это сложнее, потому что for циклы часто используют итераторы вместо индексов, но вы поняли идею.

Ответ №2:

Попробуйте:

     index = 0
    while index < len(word):
        if word[index] != "e":
            index  = 1
        else:
            return False
    return True
 

В настоящее время ваш код возвращает false в конце первого цикла

Ответ №3:

 def has_no_e1(_string):
    return 'e' not in _string


def has_no_e2(_string):
    return _string.find('e') == -1


def has_no_e3(_string):
    while _string:
        if _string[0] == 'e':
            return False
        _string = _string[1:]
    return True


if __name__ == "__main__":
    word = 'With the letter `e`'
    print(
        has_no_e1(word),
        has_no_e2(word),
        has_no_e3(word),
    )
    word = 'Without it'
    print(
        has_no_e1(word),
        has_no_e2(word),
        has_no_e3(word),
    )
 

Ответ №4:

Вы можете использовать оператор in:

 def has_no_e(word):
    return 'e' not in word
 

На случай, если вам действительно нужен цикл while:

 def while_has_no_e(word):
    characters = list(word)
    while characters:
        if characters.pop() == 'e':
            return False
    return True


print(has_no_e('foo'))
print(has_no_e('element'))

print(while_has_no_e('foo'))
print(while_has_no_e('element'))
 

Out:

 True
False
True
False
 

Ответ №5:

Некоторые изменения, и все готово, вам просто нужно записать любое условие, которое вы написали в цикле for, в while, вот и все:

 def has_no_e2(word):
    index = 0
    while index < len(word):
        if word[index] == "e":
            return False
        index =1
    return True  
 

Теперь позвольте мне дать вам один лайнер:

 >>> string = 'hello'
>>> False if string.count('e') > 0 else True
False
#changing the contents
>>> string = 'hlo'
>>> False if string.count('e') > 0 else True
True
 

Ответ №6:

Вам не нужно создавать функцию, она уже существует и называется find()

has_e = word.find(«e»)

Функция либо возвращает точную позицию буквы, либо возвращает -1, если она не существует.

Ссылка