我是编程新手,我正在寻找一些关于该怎么做的建议。我正在尝试编写的程序需要用户输入几个数字。 我想使用一个函数来测试用户是否为输入的每个值输入一个数字。如果输入不是数字,我希望函数在输入数字之前不断询问数字。我想知道是否有更好的方法将值传递给全局变量,而不是将函数中的每个变量明确声明为全局变量。我不确定是否有更好的方法来做到这一点......
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: ")
答案 0 :(得分: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)
答案 1 :(得分:0)
我没有足够的代表所以我不能发表评论但是: @Schack, 将return视为一种内部打印语句(您无法看到返回的内容,但Python解释器可以读取并使用/存储/操作该值。) print语句显示屏幕上的输出(对于人类),虽然对程序计算/运行没有任何作用,并且return语句将输出发送到python解释器(对于程序),尽管屏幕上没有显示任何内容供人类阅读。
如果函数返回一个字符串,例如,您可以通过声明:将该输出存储为变量: variable1 = function1(args)
将存储函数1返回的任何字符串(基于args的输入)作为variable1。
这对于组织代码非常有用,并且意味着您不必使用全局变量。
需要注意的重要一点是,一旦函数返回一个值,就不会执行其他代码。
例如:
def example(a, b):
for n in range(1, 30):
if a**n == b**4:
return
break
else:
return False
break和else语句是多余的,因为在函数执行return语句之后,不会执行其他代码。写这个的更好方法是:
def example(a, b):
for n in range(1, 30):
if a**n == b**4:
return n
return False
我希望我根本没有把你弄糊涂,因为我的答案有点偏离,只是想帮助,因为我是新来的,并且在我学习这些主题时发现这种解释很有用