Вызов функции в python не работает - PullRequest
0 голосов
/ 06 мая 2020

Я создал две функции. один называется possibles_compile (), а другой ref_check (). Я определил их обоих, но когда приходит время вызвать функцию possibles_compile (), она отказывается вызывать функцию и не печатает список с именами possibles, как я сказал ему впоследствии. Код работает сам по себе, но когда он помещен в функцию и вызван, он не выполняется. Вот весь соответствующий код:

import random
file = open('Script.txt', 'r')
library = list(file.read().split())
library_length = len(library)
start_words = []
possibles = []
reference = []
total_gen = []
final = ""

for i in range(library_length):
    if '.' in library[i - 1]:
        start_words.append(library[i])
        start_length = len(start_words)

x = random.randint(0, start_length - 1)
print(x)
reference.append(start_words[x])
ref_length = len(reference)
print(reference)
print(ref_length)

def possibles_compile():
    compile = 'yes'
    while compile != 'no':
        if ref_length == 1:
            for i in range(library_length):
                if library[i] == reference[0]:
                    possibles.append(library[i + 1])
                    possibles_length = len(possibles)
        elif ref_length == 2:
            for i in range(library_length):
                if library[i] == reference[0]:
                    if library[i + 1] == reference[1]:
                        possibles.append(library[i + 2])
                        possibles_length = len(possibles)
        elif ref_length == 3:
            for i in range(library_length):
                if library[i] == reference[0]:
                    if library[i + 1] == reference[1]:
                        if library[i + 2] == reference[2]:
                            possibles.append(library[i + 3])
                            possibles_length = len(possibles)
            compile = 'no'

def ref_check():
    index = random.randint(0, possibles_length - 1)
    if ref_length < 4:
        reference.append(possibles[index])
    elif ref_length == 4:
        total_gen.append(reference[0])
        reference[0] = reference[1]
        reference[1] = reference[2]
        reference[2] = reference[3]
        reference[3] = possibles[index]

possibles_compile()
print(possibles)

Прошу прощения, если вам все это не понадобилось, но я очень запутался и не знаю, что идет не так, или почему функция не вызывается предотвращает выполнение команды печати. ​​

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы хотите отредактировать глобальную переменную с именем «possibles» в функции. Напишите это:

global possibles

В основном коде и в функции "compile_possibles"

Это должно работать хорошо

0 голосов
/ 06 мая 2020

Итак, я сразу же думаю, что «возможные» не имеют значения, если только это не переменная, которую вы определили ранее. Мои мысли:

  1. Ваша функция possibles_compile () должна возвращать значение, которое вы хотите завершить. Вне функции вы определяете свою переменную и устанавливаете ее равной возвращаемому значению. Итак:

    possibles = compile_possibles ()

Тогда все, что вы хотите напечатать, будет возвращено в конце функции. Примерно так:

return result

Тогда для переменной possibles, определенной вне функции, будет установлено значение «result», которое является просто произвольным именем переменной, которое я придумал для этого. Затем просто распечатайте его.

ИЛИ

Вы определяете возможные, а затем передаете их в функцию compile_possibles () в качестве аргумента, что означает, что это будет:

def compile_possibles (possibles):

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

EDIT: Извините, я не видел верхней части вашего сообщения, где вы определили возможные варианты. Я бы по-прежнему придерживался своих предыдущих предложений: просто сказать possibles = compile_possibles (), а затем определить список в функции, которую вы хотите вернуть, и установить переменную possibles.

Если вы работаете с классами и его просто нет в коде здесь, возможно, вам придется ссылаться на свои классы и переменные, используя self, поэтому self.possibles.append () или self.compile_possibles ()

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