Python: преобразование цикла for в цикл while, но он должен соответствовать условию len (i) внутри цикла - PullRequest
0 голосов
/ 07 сентября 2018

Я практиковал переключение for циклов с while циклами в Python.

Моя проблема в строке под циклом while, где я пытаюсь проверить, не короче ли i (слово в строковом предложении), чем шесть символов. С циклом for это легко, потому что он просто перебирает каждое слово в словах, поэтому я могу использовать len(i), но в while версии i теперь int, поэтому я должен делать!

For версия петли:

def concatenation(string):
    words = string.split()
    result = ''
    for i in words:
        if len(i) < 6:
            result = result + i
    return result

Моя попытка петли while:

def concatenation(string):
    words = string.split()
    result = ''
    i = 0
    while i < len(words):
        if len(words[i]) < 6:
            result += i
            i += 1
    return result

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

i никогда не изменяется в вашем цикле while, поэтому вы никогда не достигнете его конца. Независимо от того, в обоих примерах вы используете i в другом контексте. Рекомендуется называть переменные в соответствии с тем, что они обозначают. Лучшие примеры:

Для примера цикла (чередуются i с word):

def concatenation(string):
    words = string.split()
    result = ''
    for word in words:
        if len(word) < 6:
            result += word
    return result

(исправлено) в то время как пример цикла (взаимозаменяемый i с words_index):

def concatenation(string):
    words = string.split()
    result = ''
    words_index = 0
    while words_index < len(words):
        word = words[words_index]
        if len(word) < 6:
            result += word
        words_index += 1
    return result
0 голосов
/ 07 сентября 2018

Вы уже частично его получили, когда писали

if len(words[i]) < 6:

Поскольку i - это просто индекс, вы можете получить доступ к элементам в списке words с помощью words[index], чтокак вы проверяете длину этого слова, и как вы можете добавить его к результату.

Вам также нужно увеличить i в цикле while, поскольку он автоматически не сделает это за вас.

>>> def concat_while(string):
        words = string.split()
        result = ""
        i = 0
        while i < len(words):
            if len(words[i]) < 6:
                result += words[i]
            i += 1
        return result

Контрольный пример:

>>> a = "this is a test string, alright yeah?"
>>> concat_while(a)
'thisisatestyeah?'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...