Я - опытный Java-программист, который повторно реализует некоторый код в Python, так как я просто изучаю язык. Проблема, которую я испытываю, заключается в том, что метод не возвращает ничего, когда я передаю глобальные переменные, но возвращающ предназначенный код, когда литералы передаются. Код возвращает список слов указанной длины, прошедших в, начиная с переданной строки в Например:.Передача в глобальных переменных в Python
print getNGramBeginsWords("ha", 5)
возвращается
['HAAFS', 'HAARS', 'HABIT', 'HABUS', 'HACEK', 'HACKS', 'HADAL', 'HADED', 'HADES',
'HADJI', 'HADST', 'HAEMS', 'HAETS', 'HAFIZ', 'HAFTS', 'HAHAS', 'HAIKA', 'HAIKS',
'HAIKU', 'HAILS', 'HAINT', 'HAIRS', 'HAIRY', 'HAJES', 'HAJIS', 'HAJJI', 'HAKES',
'HAKIM', 'HAKUS', 'HALAL', 'HALED', 'HALER', 'HALES', 'HALID', 'HALLO', 'HALLS',
'HALMA','HALMS', 'HALON', 'HALOS', 'HALTS', 'HALVA', 'HALVE', 'HAMAL', 'HAMES',
'HAMMY', 'HAMZA', 'HANCE', 'HANDS', 'HANDY', 'HANGS', 'HANKS', 'HANKY', 'HANSA',
'HANSE', 'HANTS', 'HAOLE', 'HAPAX', 'HAPLY', 'HAPPY', 'HARDS', 'HARDY', 'HARED',
'HAREM', 'HARES', 'HARKS', 'HARLS', 'HARMS', 'HARPS', 'HARPY', 'HARRY', 'HARSH',
'HARTS', 'HASPS', 'HASTE', 'HASTY', 'HATCH', 'HATED', 'HATER', 'HATES', 'HAUGH',
'HAULM', 'HAULS', 'HAUNT', 'HAUTE', 'HAVEN', 'HAVER', 'HAVES', 'HAVOC', 'HAWED',
'HAWKS', 'HAWSE', 'HAYED', 'HAYER', 'HAYEY', 'HAZAN', 'HAZED', 'HAZEL', 'HAZER',
'HAZES']
, как это должно быть. Однако
print inputString
print numLetters
print getNGramBeginsWords(inputString, numLetters)
возвращает
ha
5
[]
inputString и numLetters глобальные переменные, которые я видел, называется «опасным», хотя я не знаю, почему, и думал, что они могут быть причиной этой странности? Даже локальные копии глобальных переменных, используемых в качестве параметров, не помогают. Возможно, мне нужно использовать «глобальное» ключевое слово в параметрах метода, хотя из моих исследований кажется, что вам не нужно «глобальное» ключевое слово, если вы не изменяете глобальную переменную? Любое предложение или помощь будут оценены. На авось, что это проблема с методом, здесь:
def getNGramBeginsWords(nGram, length):
dict = open('/home/will/workspace/Genie/src/resources/TWL06.txt', 'r')
nGram = nGram.upper()
words = []
for line in dict:
if(len(line)>0):
if(len(nGram)>len(line.strip()) | len(line.strip())!= length):
continue
s = line.strip()[:len(nGram)]
if(s == nGram and len(line.strip()) == length):
words.append(line.strip())
return words
Если вы: 'тип печати (numLetters)' перед вызовом 'getNGramBeginsWords', вы получите' 'или' '? Я подозреваю, что вы получили последнее, так что для каждой строки вы сравниваете длину строки с строкой '' 5 "'. (Side note: 'dict' - это имя типа в Python. Вы можете повторно использовать их в качестве локальных переменных, это просто делает сюрприз, когда вы затем пытаетесь сделать dict, вызывая' dict'. Возможно, используйте 'stream 'вместо имени переменной :-)) –
torek
Вы уверены, что это' '' вы хотите в 'if (len (nGram)> len (line.strip()) | len (line.strip())! = длина) '. Потому что в Python '|' побитовое ИЛИ и 'or' является логическим ИЛИ. –
Кроме того, не забудьте закрыть файл 'dict'. Попробуйте использовать 'with open (..., 'r') в качестве dict:' statement. –