Sch*_*ack 1 python variables global local
我是编程新手,我正在寻找一些关于该怎么做的建议.我正在尝试编写的程序需要用户输入几个数字.我想使用一个函数来测试用户是否为输入的每个值输入一个数字.如果输入不是数字,我希望函数在输入数字之前不断询问数字.我想知道是否有更好的方法将值传递给全局变量,而不是将函数中的每个变量明确声明为全局变量.我不确定是否有更好的方法来做到这一点......
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: ")
Run Code Online (Sandbox Code Playgroud)
只需使它成为一个函数,返回一些东西而不是操纵全局,更容易维护!
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
Run Code Online (Sandbox Code Playgroud)
而不是像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."
Run Code Online (Sandbox Code Playgroud)
现在你也可以:
x = get_num("test") # normal int
x = get_num("foo", float)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |