Как мне исправить мой бесконечный цикл из оператора if? - PullRequest
0 голосов
/ 12 декабря 2018

У Алисы завтра будет эссе с W-словом (1 ≤ W ≤ 10000), но она слишком занята программированием, чтобы беспокоиться об этом!Тем не менее, Алиса знает, что учительница английского языка в средней школе HS устала от чтения и оценки длинных эссе, поэтому она полагает, что, если она просто представит «разумное» эссе, которое соответствует требованиям, но настолько коротким, насколько это возможно, ей может быть немного жальmarks!

Таким образом, Алиса хочет написать программу для генерации последовательности W слов, которые будут выдаваться за ее эссе, где каждое слово - это любая строка, состоящая из 1 или более строчных букв ("a" .."z") (не обязательно настоящее английское слово).В эссе не будет пунктуации или форматирования, так как те, которые кажутся Алисе ненужными.В попытке замаскировать суть эссе, Алиса будет настаивать на том, что все W слова различны.Наконец, для того, чтобы ее план собрал вместе, она сделает сумму длин слов W как можно меньше.

Помогите Алисе составить любое эссе, отвечающее вышеуказанным требованиям.

На данный момент, я думаю, я идентифицировал фрагмент кода, который вызывает бесконечный цикл.Однако я не могу узнать, как это исправить.Моя теория: первое утверждение if противоречит другим утверждениям if, вызывая бесконечный цикл.Это начинает бесконечный цикл, когда он достигает слов третьего символа.

import string, math
w = int (raw_input(" "))
words = []
paragraph = ""
alphabet = string.ascii_lowercase

first_alpha = -1
second_alpha = 0
third_alpha = 1
switch_to_two_char = False
switch_to_three_char = False

def unique(s):
    return len(set(s)) == len(s)

x = 0 
while (x != w):
    word = ""
    if (x != 0):
        word = " "

    if (first_alpha >= 25):
        first_alpha = 0
        switch_to_two_char = True
    elif (second_alpha >= 25):
        second_alpha = 0
        first_alpha += 1
    elif (second_alpha >= 25 & first_alpha >= 25):
        first_alpha = 0
        second_alpha = 0
        switch_to_three_char = True
    elif (third_alpha >= 25):
        second_alpha += 1
        third_alpha = 0

    else:
        if (switch_to_two_char and not switch_to_three_char):
            second_alpha += 1
        if (switch_to_three_char):
            third_alpha += 1
        else:
            first_alpha += 1


    if (switch_to_two_char):
        word += alphabet[second_alpha]
        word += alphabet[first_alpha]
    elif (switch_to_three_char):
        word += alphabet[third_alpha]
        word += alphabet[second_alpha]
        word += alphabet[first_alpha]
    else:
        word += alphabet[first_alpha]

    if (unique(word) == 0):
        continue

    if (word in words):
        continue
    else:
        paragraph += word
        words.append (word)
        x += 1

print paragraph

1 Ответ

0 голосов
/ 12 декабря 2018

Когда second_alpha добавляют к 25, first_alpha + 1 и second_alpha возвращаются к 0. Таким образом, когда first_alpha добавляет к 25 наконец, second_alpha снова возвращается к 0.Следующий цикл, ваша программа перейдет в этот оператор if.

elif (first_alpha >= 25):
    first_alpha = 0
    switch_to_two_char = True

И затем first_alpha и second_alpha снова возвращаются к 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...