-1
def GameMode():#creates a function with name of gamemode
    global wrong_answer_1
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values
            global keyword_c
    for keys,values in definition.items():#checks for the right answer
        if keys == code + 1:#if the keys equal the code add 1
            definition_c = values#set s to be the values
    for keys,values in definition.items():#checks for the right answer
        if inc == keys:#if the keys equal the code add 1
            wrong_answer_1 = values#set s to be the values
    for keys,value in definition.items():#For the keys in the dictionary
        if keys == inc2:#if the keys equal to a value
            global wrong_answer_2
            wrong_answer_2 = value

    print(wrong_answer_2, "Hi")

別の関数で使用できるように、変数 keyword_c、definition_c、wrong_answer_1、wrong_answer_2 をグローバルにしようとしていますが、うまく動作しないようです。Python に関しては初心者です。上記のように「グローバル」を使用してみました。変数を呼び出して渡してみましたが、理解できるほど十分に理解していません。

keyword_c = ''
definition_c = ''
wrong_answer_1 = ''
wrong_answer_2 = ''

私はすでに変数を事前定義して、それが何かをしたかどうかを確認しました。それらはそこにありますが、現在は単なる空の文字列であるため、プログラムは変数が定義されているという事実を認識しています。

Traceback (most recent call last):
  File "D:\Program.py", line 67, in <module>
   GameMode()#calls the function
  File "D:\Program.py", line 55, in GameMode
    print(wrong_answer_2, "Hi")
NameError: name 'wrong_answer_2' is not defined

これは、空白文字列として設定する元の行を削除すると発生するエラーです

4

2 に答える 2

0

変数を使用してクラスを作成したくないのはなぜですか。

self.keyword_c = ''
self.definition_c = ''
self.wrong_answer_1 = ''
self.wrong_answer_2 = ''

そのため、変数はグローバルになり(すべてのメソッドと変数がクラス内にある場合)、メソッドで:

def GameMode(self):#creates a function with name of gamemode
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            self.keyword_c = values
            #(...)

そして実際には、ここにエラーが発生する可能性のある間違いがあります(コメントしました):

def GameMode():#creates a function with name of gamemode
    global wrong_answer_1
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values # keyword_c doesn't exist here, you cannot assign here
            global keyword_c   # its created here, so it now exists
于 2016-09-29T08:52:32.233 に答える
0

あなたの機能が何をしているのかわかりません。すべての構文エラーで推測するのは困難ですが、関数内で定義されていないすべての関数の先頭にある単一のグローバルを使用して、次の構文エラーを修正します。

def GameMode():#creates a function with name of gamemode
    global inc, inc2, code, wrong_answer_1, wrong_answer_2, keyword_c
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values
    for keys,values in definition.items():#checks for the right answer
        if keys == code + 1:#if the keys equal the code add 1
            definition_c = values#set s to be the values
    for keys,values in definition.items():#checks for the right answer
        if inc == keys:#if the keys equal the code add 1
            wrong_answer_1 = values#set s to be the values
    for keys,value in definition.items():#For the keys in the dictionary
        if keys == inc2:#if the keys equal to a value
            wrong_answer_2 = value

    print(wrong_answer_2, "Hi")

keywords = {
    1: 'a',
}
definition = {
    1: 'a',
}
code = 1
inc = 1
inc2 = 1
wrong_answer_1 = None
wrong_answer_2 = None
keyword_c = None

GameMode()
print(inc, inc2, code, wrong_answer_1, wrong_answer_2, keyword_c)

それは出力されます:

a Hi
1 1 1 a a a
于 2016-09-29T08:59:39.707 に答える