Определенное количество элементов ввода в списке - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть список слов, и мой ввод - это одно из слов в первой половине списка (в данном случае этот список - немецкая песня). Теперь я беру длину этого слова и перескакиваю на длину этого слова в списке, например, первое слово в списке - «Es», а длина - 2. Теперь мы отсчитываем от «Es» 2 раза и получаем слово »Zwei». Я должен пройти через этот список и проверить, появляется ли слово снова во второй половине списка.

Программа работает, но проблема заключается в вводе. Он берет одно слово и видит, работает ли теория. Это список песен: «hin» - это последнее слово первой половины

song = [
    "Es", "gingen", "zwei", "Parallelen",
    "ins", "Endlose", "hinaus",
    "zwei", "kerzengerade", "Seelen",
    "und", "aus", "solidem", "Haus", 

    "Sie", "wollten", "sich", "nicht", "schneiden", 
    "bis", "an", "ihr", "seliges", "Grab", 
    "Das", "war", "nun", "einmal", "der", "beiden", 
    "geheimer", "Stolz", "und", "Stab", 

    "Doch", "als", "sie", "zehn", "Lichtjahre", 
    "gewandert", "neben", "sich", "hin", #End of the first half of the song
    "da", "wards", "dem", "einsamen", "Paare", 
    "nicht", "irdisch", "mehr", "zu", "Sinn", 

    "Warn", "sie", "noch", "Parallelen",
    "Sie", "wusstens", "selber", "nicht", 
    "sie", "flossen", "nur", "wie", "zwei", "Seelen",
    "zusammen", "durch", "ewiges", "Licht", 

    "Das", "ewige", "Licht", "durchdrang", "sie",
    "da", "wurden", "sie" "eins", "in", "ihm", 
    "die", "Ewigkeit", "verschlang", "sie",
    "als", "wie", "zwei", "Seraphim"] 

Я хочу, чтобы мой ввод состоял из всех слов первой половины списка (в данном случае песни), а нетолько одно слово. Таким образом, он просто распечатывает результат (в данном случае результат представляет собой список) для каждого слова в каждой строке.

This is how the output now looks

И я хочу, чтобы он немедленнопечатать каждый результат для каждого слова в первой половине, и если теория работает. Это будет чем выход:

Теория работает / не

Результат1

Теория работает / не

Результат2

Теория работает / не

Результат3

И так далее ...

Вот код:

with open('C:/Users/xy/Desktop/BWINF/parallelen.txt', 'r') as f:

song = f.read()

noneed = "–?,.;:"
for char in noneed:
    song = song.replace(char, "")
song = song.split()

def Parallelen(listSong):

originalWord = input("Enter a word: ")
originalWordSaved = originalWord
theorie_list = [] # The list for found words
index = song.index(originalWord) # Get the index of the first instance of "word"
indexOriginal = song.index(originalWordSaved)
wordCount = song.count(originalWord)

while True:
    if indexOriginal > 42:
        print("Word is in the second half")
        break
    if wordCount <= 1:
        print("Word appears only 1 time and therefore can't appear one more time")
        print("Theorie doesn't work")
        break  
    try:
        theorie_list.append(listSong[index])
        theorie_list.append(len(listSong[index]))
        index += len(listSong[index]) 
        if listSong[index] == originalWordSaved:
            theorie_list.append(listSong[index])
            theorie_list.append(len(listSong[index]))
            print("Theorie works")
            break
    except:
        print("Theorie doesn't work") 
        break

return theorie_list

print(Parallelen(song))

1 Ответ

1 голос
/ 10 ноября 2019

Вот версия функции, которая обрабатывает каждое слово в первой части списка. В вопросе говорится, что программа работает, поэтому основная логика не была изменена.

Были внесены следующие изменения:

  • удалить оператор input
  • добавить цикл for над первой частью списка
  • распечатать обрабатываемое слово (для отладки и читабельности может быть удалено)
  • удалить лишние originalWordSaved и originalIndex переменные
  • убрать логику фильтрации (слово входит во вторую половину списка или появляется менее чем в два раза) из цикла while, поскольку его нужно запускать только один раз для слова
  • код перемещения, который не может вызвать IndexError из блока try / кроме
  • , в частности, прерывание IndexError, потому что это единственная ошибка, которую может выдать код: следует избегать использования простых except операторов
  • печатать список, а не возвращать его
def Parallelen(listSong):

    # Magic number: length of list is 89
    halfway = 42

    for originalWord in listSong[: halfway + 1]:
        print("\nProcessing {!r}".format(originalWord))
        theorie_list = []  # The list for found words
        index = song.index(originalWord)
        # Get the index of the first instance of "word"
        index = song.index(originalWord)
        if index > halfway:
            print("Word is in the second half")
            continue
        wordCount = song.count(originalWord)
        # The word must appear at least once
        if wordCount == 1:
            print("Word appears only 1 time and therefore can't appear one more time")
            print("Theorie doesn't work")
            continue

        while True:
            theorie_list.append(listSong[index])
            theorie_list.append(len(listSong[index]))
            index += len(listSong[index])
            try:
                if listSong[index] == originalWord:
                    theorie_list.append(listSong[index])
                    theorie_list.append(len(listSong[index]))
                    print("Theorie works")
                    break
            except IndexError:
                print("Theorie doesn't work")
                break
        print(theorie_list)

    return


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