Previous Function不会转移到下一个函数NameError:name未定义

时间:2016-05-03 12:18:30

标签: python python-3.x

到目前为止,这是我的代码。我目前正在创建一个类似于刽子手游戏的程序,我不确定如何克服这个小驼峰。 ATM我无法将函数 loadwordlist():中定义的变量传递给名为 gethint()的第二个函数:有关如何操作的任何提示?

import random

def setup():

    print("Reading Word List...")
    print("Selecting Secret Word...")
    print("A secret word has been selected...")

setup()

def loadwordlist():

    word = open ('words.txt').read().splitlines()
    secret_word = random.choice(word).lower()
    guessed_word = []
    guessed_letters = []
    for letters in secret_word:
        guessed_word.append('_')
    return ' '.join(guessed_word)

print(loadwordlist())

total_guesses = 10
print(("You have {} guesses left").format(total_guesses))

def gethint():

    loadwordlist()
    guess = input("Please enter a guess:")
    guess = guess.lower()
    if guess in guessed_word:
        print("You guessed Correctly")
        guessed_letters.append(guess)

gethint()

1 个答案:

答案 0 :(得分:0)

Ignacio建议将它们放在一个共同范围内。如果你明白这意味着什么,他是对的。鉴于您的代码,您可能是新手,因此您可能无法理解范围。在某些时候,谷歌'python范围'(没有引号),你会找到解释。

最小修复是将guessed_letters = []移动到全局范围(任何函数之外)或gethint()之内。此外,在gethint()中,将loadwordlist()的调用更改为guessed_word = loadwordlist()

最低限度修改的程序变为

import random

def setup():
    print("Reading Word List...")
    print("Selecting Secret Word...")
    print("A secret word has been selected...")

setup()

def loadwordlist():
    word = open ('words.txt').read().splitlines()
    secret_word = random.choice(word).lower()
    guessed_word = []

    for letters in secret_word:
        guessed_word.append('_')
    return ' '.join(guessed_word)

print(loadwordlist())

total_guesses = 10
print(("You have {} guesses left").format(total_guesses))
guessed_letters = []    

def gethint():
    guessed_word = loadwordlist()
    guess = input("Please enter a guess:")
    guess = guess.lower()
    if guess in guessed_word:
        print("You guessed Correctly")
        guessed_letters.append(guess)

gethint()

对于一个简单的程序,函数只是妨碍你,因为它们将变量限制在函数的范围内。另一个修复是删除函数语义(def行和调用它们的行),以便所有内容都在全局范围内:

import random

guessed_letters = []
guessed_word = []

print("Reading Word List...")
word = open ('words.txt').read().splitlines()
print("Selecting Secret Word...")
secret_word = random.choice(word).lower()
print("A secret word has been selected...")

for letters in secret_word:
    guessed_word.append('_ ')
print(' '.join(guessed_word))
total_guesses = 10
print(("You have {} guesses left").format(total_guesses))
guess = input("Please enter a guess:")
guess = guess.lower()
if guess in guessed_word:
    print("You guessed Correctly")
    guessed_letters.append(guess)

我尽可能少地修改你的程序来说明差异;还有更多工作要做。例如,程序要求输入第一个字母,然后终止。

此外,它现在也不是'pythonesque'解决方案,但对于第一个程序,不要担心,只需通过使其工作来学习你学到的东西。在它工作之后,更多地学习python并根据你学到的东西进行改进。

我也是一个蟒蛇新手。祝你好运!