Я застрял на этом, который содержит глобальные переменные, и я знаю, что, как я их разбил, он просто не работает. Позвольте мне показать вам мой код:Как использовать глобальные переменные и как их правильно определить?
suffix_map = {}
prefix =()
def markov_body(file, order, header_text, header = True):
start = open(file)
if header:
for line in start:
if line.startswith(header_text):
break
for line in start:
for word in line.rstrip().split():
global prefix
if len(prefix) < order:
prefix += (word,)
return
try:
suffix_map[prefix].append(word)
except KeyError:
suffix_map[prefix] = [word]
prefix = shifted(prefix, word)
def shifted(t, word):
return t[1:] + (word,)
def markov_text(n):
begin = random.choice(list(suffix_map.keys()))
for i in range(n):
suff = suffix_map.get(begin)
if suff == None:
return markov_text(n-i)
word = random.choice(suff)
print(word, end = "")
begin = shifted(begin, word)
print(markov_text(100))
В global
переменные prefix
и suffix_map
. Первый вопрос должен состоять в том, почему я должен определить его снова как global
в моем for-loop, если он глобальный и определен вне метода? Второй вопрос: почему ничего не добавляет к prefix
и suffix_map
? Спасибо за вашу помощь!
сторонний комментарий: глобальные переменные - это плохое программирование. я бы не использовал их. почему бы вам не добавить 'префикс' в качестве аргумента для вашей функции? –