1

私はプログラミングが初めてで、何をすべきかについてアドバイスを探しています。私が書こうとしているプログラムは、ユーザーからのいくつかの番号を必要とします。関数を使用して、入力された値ごとにユーザーが数値を入力したかどうかをテストしたいと考えています。入力が数値でない場合、数値が入力されるまで関数が数値を要求し続けるようにします。関数内の各変数をグローバルとして明示的に宣言する以外に、値をグローバル変数に渡すより良い方法があるかどうかを知りたいです。これを行うためのより良い方法があるかどうかはわかりません...

rowNum = None

def numTest(c, d):
    x = False
    while x is not True:    
        try:
            c = raw_input(d)   
            c = float(c)
            x = True
        except:
            print "The value you entered isn't a valid number, please try again."            
    global rowNum 
    rowNum = c

numTest(rowNum, "Enter number of rows: ")
print rowNum
# I want to use the numTest function on several variables...
# e.g.
# numTest(contourLevel, "Enter number of contour levels: ")
# numTest(cellSize, "Enter cell size: ")
# numTest(labelSize, "Enter label size: ")
4

2 に答える 2

5

グローバルを操作する代わりに何かを返す関数にするだけで、メンテナンスがはるかに簡単になります!

def get_num(msg):
    while True:    
        try:
            return int(raw_input(msg)) # number of rows should be int
        except ValueError:
            print "The value you entered isn't a valid number, please try again."            

num_rows = get_num("Enter number of rows: ")
print num_rows

あなたが言及したようなものの代わりにnumTest(cellSize, "Enter cell size: ")、あなたはやるべきですcellSize = get_num("Enter cell size: "). 値を返すことをお勧めします。

次のように、この関数をより一般的なものにすることができintますfloat

def get_num(msg, type_=int):
    while True:    
        try:
            return type_(raw_input(msg))
        except ValueError:
            print "The value you entered isn't a valid number, please try again."

今、あなたも持つことができます:

x = get_num("test") # normal int
x = get_num("foo", float)
于 2013-04-19T22:03:22.703 に答える