Python: как использовать цикл while и вывести правильное количество слов

Это то, что я до сих пор:

while len(words) != 5:
        words = raw_input("Enter a 5 worded sentence: ").split()
        print "Try again. The word count is:", wordCount
if len(words) == 5:
        print "Good! The word count is 5!" 

Проблема в том, что я получаю это:

Enter a 5 worded sentence: d d d d
Try again. The word count is: 4
Enter a 5 worded sentence: d d d d d d 
Try again. The word count is: 4
Enter a 5 worded sentence: d d d d d 
Try again. The word count is: 4
Good! The word count is 5!

Когда я ввожу больше или меньше 5 слов, он сохраняет количество слов и не меняется.

5 ответов

Поскольку Python не имеет do-while как и некоторые другие языки, эта идиома предотвращает дублирование raw_input функция, и убедитесь, что цикл запускается хотя бы один раз. Обязательно обновите word_count после получения нового ввода.

while 1:
    words = raw_input("Enter a 5 worded sentence: ").split()
    word_count = len(words)
    if word_count == 5: break
    print "Try again. The word count is:", word_count
print "Good! The word count is 5!"

Вам просто нужно изменить порядок вашей логики:

# prompt before entering loop
words = raw_input("Enter a 5 worded sentence: ").split()
while len(words) != 5:
        print "Try again. The word count is:", len(words)
        words = raw_input("Enter a 5 worded sentence: ").split()

# no need to test len again
print "Good! The word count is 5!" 

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

wordCount = 0
while wordCount != 5:
    words = raw_input("Enter a 5 worded sentence: ").split()
    wordCount = len(words)
    print "Try again. The word count is:", wordCount

print "Good! The word count is 5!" 

Переменная wordCount должна быть обновлена ​​внутри цикла после того, как вы примете ввод. Только тогда это будет отражать новое значение. Что-то вроде этого:-

while len(words) != 5:
    words = raw_input("Enter a 5 worded sentence: ").split()
    wordCount = len(words)
    print "Try again. The word count is:", wordCount
if len(words) == 5:
    print "Good! The word count is 5!" 
def xlen(string_data):
    try:
        count = 0
        while 1:
            string_data[count]
            count = count + 1
    except(IndexError):
        print count

xlen('hello')
Другие вопросы по тегам