簡體   English   中英

為什么python認為我沒有定義我的變量?

[英]Why does python think I haven't defined my variables?

我寫了一個 Hang-man 游戲,用來玩電腦。 它從另一個名為 'words' 的 python 文件中選擇一個單詞,你猜字母。 但是我在哪里定義我的名字並不重要,它總是說它們沒有定義。

>     line 20, in <module>
>     while len(word_letters) > 0: 
> NameError: name 'word_letters' is not defined

>     line 27, in <module>
>     while len(word) > 0:
> NameError: name 'word' is not defined

>     line 31, in <module>
>     while len(alphabet) > 0:
> NameError: name 'alphabet' is not defined

我在 def hangman 中定義了我的變量,為什么它不通信。 我需要在某處將其設置為全局變量嗎?

    import random
from words import words 
import string

def get_valid_word(words):
    word = random.choice(words)     # randomly chooses something from the list
    while '-' in words or ' ' in word:
        word = random.choice(words)

    return word

def hangman():
    word = get_valid_word(words)
    word_letters = set(word)
    alphabet = set(string.ascii_uppercase)
    used_letters = set()        # what the user has guessed already

    #getting user input 
    word_letters = set(word)
while len(word_letters) > 0:

    word = random.choice(words)
    word_letters = set(word)
    alphabet = set(string.ascii_uppercase)
    used_letters = set()        # what the user has guessed already

    # letters they already used
    # ' '.join (['a', 'b', 'cd']) --> 'a b c d'
    print('You have used these already: ', ' '.join(used_letters))

    # what current word is (ie W - R D)
    word_list = [letter if letter in used_letters else '-' for letter in word]
    print('Current word: ', ' '.join(word_list))

    user_letter =input('Guess a letter').upper()
    if user_letter in alphabet - used_letters:
        used_letters.add(user_letter)
        if user_letter in word_letters:
            word_letters.remove(user_letter)

    elif user_letter in used_letters:
        print('You have already used that character. Please try again.')

    else:
        print('You didn\'t type in a valid character. Please try again.')

# gets here when len(word_letters) == 0

user_input = input('Type something:')
print(user_input)

您需要修復第 24 行的縮進並修復變量名稱應該具有不等於導入名稱的唯一名稱

    import random
import string

from words import words


def get_valid_word(words_var):
    word = random.choice(words_var)  # randomly chooses something from the list
    while '-' in words_var or ' ' in word:
        word = random.choice(words_var)

    return word


def hangman():
    word = get_valid_word(words)
    word_letters = set(word)
    alphabet = set(string.ascii_uppercase)
    used_letters = set()  # what the user has guessed already

    # getting user input
    word_letters = set(word)

    while len(word_letters) > 0:

        word = random.choice(words)
        word_letters = set(word)
        alphabet = set(string.ascii_uppercase)
        used_letters = set()  # what the user has guessed already

        # letters they already used
        # ' '.join (['a', 'b', 'cd']) --> 'a b c d'
        print('You have used these already: ', ' '.join(used_letters))

        # what current word is (ie W - R D)
        word_list = [letter if letter in used_letters else '-' for letter in word]
        print('Current word: ', ' '.join(word_list))

        user_letter = input('Guess a letter').upper()
        if user_letter in alphabet - used_letters:
            used_letters.add(user_letter)
            if user_letter in word_letters:
                word_letters.remove(user_letter)

        elif user_letter in used_letters:
            print('You have already used that character. Please try again.')

        else:
            print('You didn\'t type in a valid character. Please try again.')


# gets here when len(word_letters) == 0

user_input = input('Type something:')
print(user_input)

除了其他人所說的關於縮進的內容之外,我沒有看到對hangman函數的調用。 這意味着從一開始就不會啟動這些值。 我會在你的程序結束時打電話來開始整個過程​​。 就像是:

    hangman()
    user_input = input('Type something:')
    print(user_input)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM