对于有经验的编码员来说,这应该是一个简单的...我正在编写一个程序,从混乱的输入中输出anagrams(来自给定的列表)。我相信我的代码包含了产生所需结果的所有必要函数,但我无法弄清楚如何使程序按顺序运行各自的函数。示例输出为:
Please enter a jumbled word: lsitNe
Your words are:
silent
listen
enlist
tinsel
这是我的输出,目前:
Please enter a jumbled word: dff
Traceback (most recent call last):
File "/Users/edinnerman/Desktop/poop.py", line 53, in <module>
main()
File "/Users/edinnerman/Desktop/poop.py", line 5, in main
yay_anagrams = anagramlist(lword)
NameError: name 'lword' is not defined
在给定用户输入的情况下,如何重新格式化代码以输出文本文件中列出的所有字谜? 这是我的代码:
#0: Create a main function to bring all functions together for the output.
def main():
textfile = open('words.txt', 'r').read()
dictionary_of_words = filename(textfile)
yay_anagrams = anagramlist(lword)
double_whammy = binary_search(fresh_list, ltextfile)
answer = output()
#1, 2: Take a filename as a parameter and ask user for word to unjumble. Lowercase all.
def filename(textfile):
ltextfile = textfile.lower()
scrambled_eggs = input("Please enter a jumbled word: ")
lword = scrambled_eggs.lower()
#3: Create an anagram list (already lowercase) for the jumbled word.
def anagramlist(lword):
if lword == "":
return([lword])
else:
yay_word = lword[1:]
first_letter = lword[0]
fresh_list = []
for mixed_word in filename(yay_word):
for pos in range(len(mixed_word) + 1):
fresh_list.append(mixed_word[:pos] + first_letter[0] + mixed_word[pos:])
return fresh_list
#4: Check if any words in anagram list match dictionary list.
def binary_search(fresh_list, ltextfile):
for eachword in fresh_list:
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high)//2
item = list[mid]
if fresh_list == item:
return True
elif fresh_list < item:
high = mid - 1
elif fresh_list > item:
low = mid + 1
return False
#5: Print appropriate statements.
def output():
if fresh_list == True:
newlist = set()
for item in fresh_list:
newlist.add(item)
print("Your words are:/n", newlist)
if fresh_list == False:
print("Your word cannot be unjumbled.")
main()
请原谅我在此代码中可能遇到的一些轻微编码错误。
答案 0 :(得分:2)
这里最主要的问题是,在将结果分配给变量方面,您没有正确的流程。根据评论中的建议 - 您可能需要查看the python function definition tutorial section。我已经提出了你需要解决的一些特殊问题。
特别是 - 您需要考虑return
语句。如果函数定义没有return
语句,那么为其结果赋值变量是没有意义的。试试一个例子:
def main():
x = 1+1
y = main()
print(y)
您可能期待2
- 实际上您会看到None
,因为该功能不会返回任何内容。如果你改变了它,那就是:
def main():
x = 1+1
return x
y = main()
print(y)
您现在获得输出2
。您的函数filename()
和output()
会受此影响。
如果已经分配了代码块中的变量值,则只能使用它们。
例如 - 考虑以下非常简单的程序
def message(x):
return 'You input the string ' + x
def main():
first_in = input('Please give me some input')
result = message(in_from_above)
print(result)
main()
这将以与您的程序类似的方式失败,因为in_from_above
不是已在程序中定义的变量。如果您将其更改为:
def message(x):
return 'You input the string ' + x
def main():
first_in = input('Please give me some input')
result = message(first_in)
print(result)
main()
它将输出返回的消息。此问题会影响main()
中的序列,当您未在lword
中分配任何值时尝试将anagramlist()
发送到lword
函数main()
函数。
注意 我可以看到您在lword
函数中为filename()
分配了一个值。您可能希望该作业可用于main()
功能。它不会。这与称为变量范围的事情有关。通常在Python中,变量是 local ,或仅在定义和分配它们的代码块中可用。另一种类型的变量是全局变量 - 其中变量可用于程序范围的代码。你可以在一个函数global
中明确地创建一个分配,但我可以肯定地说你不需要为这个分配做这个,并建议你没有。范围界定非常简短in the Python docs here。范围界定是一个非常基本的编程概念,值得花一些时间来了解。玩一些简单的例子 - 在函数内部和外部使用相同的变量名称,看看你得到了什么等等。
当出现问题时,为了帮助调试,简化案例并了解他们出错的地方。你可以看到我已经用非常简单的案例展示了你遇到的主要问题。你也可以做到的。函数中的逻辑可能会或可能不会完全按照您的意愿工作,但在您对这些基础知识进行排序之前,将无法调试更复杂的情况。
修改 - 推荐
再看看你的代码,我还建议拆分#1和#2的函数 - 即一个函数用于小写你的字典,另一个用于获得小写用户输入。它不是必需的,但它会让您的代码更容易理解,让您的生活更轻松。