0

次のプログラムが「b」を出力しないのはなぜだろうと思っています。これは非常に単純なコードです。うまくいくに違いないと思います。そして、それができない理由を知りません。

def a():
    if b > 10:
        print 'b'
        sys.exit(1)

# main
while 1:
    a()
    b += 1

b はグローバル変数です。実際のコードはもっと複雑ですが、構造は私のものと同じです。a() 関数を呼び出すと、b が 10 より大きい場合、「b」が表示されると思います。ただし、if 文の中には入りません。

解決方法を教えていただけませんか?

ありがとう。

4

5 に答える 5

3

グローバルは恐ろしく、それらを使用しないことを学びます。このようなことを試してください

import sys
def a(value):
    if value > 10:
        print value
        print "Greater than 10!"
        sys.exit(0)
b = 0
while True:
    a(b)
    b += 1
于 2012-05-28T17:34:39.513 に答える
0

グローバル変数は通常の方法ではありません。代わりに、ネストされた関数を使用することをお勧めします。

import sys

def outer(value=0):
    count = [value]
    print "started at:", count[0]
    def inner(x=1):
        print "current val:", count[0]
        count[0] += x
        if count[0] > 10:
            print "stopped at:", count[0]
            sys.exit(0)
    return inner

f = outer(5)
while True:
    f(1)
于 2012-05-28T18:32:29.233 に答える
0

ちょうど私の 2 セント: グローバル変数を忘れてください。

とにかく、これはうまくいくはずです

def a():
    global b
    if b > 10:
        print 'b'
        sys.exit(1)

ふうううううううううううう編集

関数の引数を使用してグローバルを回避する方法については、Jackob に完全に同意しますが、記録のために、グローバルを使用したソリューションを次に示します。

def a():
    global b
    if b > 10:
        print 'b'
        sys.exit(1)

# main
b = 0
while 1:
    a()
    b += 1
于 2012-05-28T17:34:13.057 に答える
0

「+=」する前に b を定義する必要があります。

def a():
    if b > 10:
        print 'b'
        sys.exit(1)

# main
b = 0 # HERE
while 1:
    a()
    b += 1

ところで、多くの人が言ったように、グローバルは避けてください。

于 2012-05-28T17:45:50.633 に答える