2

それで、私はいくつかの頭痛の種を私に提供しているコードの一部を手に入れました。

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    else:
        Handy()
    return handy, wunschhandy

オプションを選択すれば、"1"すべて問題ありません。しかし、私が"2"それのために行くならば、私にこのエラーを与えます:"UnboundLocalError: local variable 'wunschhandy' referenced before assignment"

私はそれが起こっている理由を知っています、あるいは少なくとも私は理由を知っていると思います。wunschhandyオプションを使用したため、変数がクリアされていないためです"2"

では、どうすればこの問題を解決できますか?選択した場合に権利によって割り当てられている場合にのみ、値を返す方法はありますか?

4

5 に答える 5

1

ユーザーが「1」を選択した場合にのみ戻りたいwunschhandy場合は、returnステートメントをifブロック内に配置します

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
        return handy
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
        return handy, wunschhandy
    else:
        Handy()
        //do you want to return Handy()?
于 2013-03-26T17:22:59.130 に答える
1

あなたの場合、私は声明wunschhandy = Noneの前に設定します。if

この場合、定義された値があり、呼び出し元はそれをテストできます。

別のオプションは

if handy == "2":
    print "\nSie möchten kein neues Handy"
    return handy,
elif handy == "1":
    wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    return handy, wunschhandy
else:
    Handy()

これは、オプション1の場合は長さ2のタプルを返し、オプション2の場合は長さ1のタプルを返します。呼び出し元はそれを簡単にテストできます。

その上、再帰的に呼び出す代わりに、そのHandy()中にループを入れます。そうしないと、スタックオーバーフローエラーが発生する可能性があります...

于 2013-03-26T17:23:24.370 に答える
0

提供したコードの小さなスニペットに基づくと、「wunschhandy」変数は「handy == "1"」の場合にのみ定義されているようですが、この変数は最後に返されます。ifステートメントの上でwunschhandyをnullに設定して、変数が最後に返される前に定義されるようにします。

于 2013-03-26T17:22:35.000 に答える
0

これは、wunschhandy宣言される前に変数が返されるためです。1を入力した場合にのみ、宣言されます。ifステートメントの前に宣言しwunschhandyてdefualt値を割り当てることができます。

于 2013-03-26T17:22:43.600 に答える
0

初期化するだけwunschhandyなので、範囲内にあります。

def Handy():
    handy = raw_input("Moechten Sie ein neues Handy?\n1 - Ja\n2 - Nein\n>>> ")

    wunschhandy =  None
    if handy is "2" :
        print "\nSie moechten kein neues Handy"
    elif handy is "1" :
        wunschhandy = raw_input("\nBitte geben sie den Namen des Handys ein: ")
    else :
        Handy()
    return handy, wunschhandy
于 2013-03-26T17:26:32.837 に答える