William Witteman wrote:
I need to collect a couple of integers from a user, but I want to make
sure that I actually get integers. I tried this, but subsequent calls
to the function don't update variable. I'm not sure this is terribly
clear - here's the code:
num_of_articles = 0
num_of_reviewers = 0
def getinput(variable,prompt):
"""
Get the input by prompting the user and collecting the response - if it is
a non-integer, try again.
"""
variable = 0
variable = raw_input(prompt)
try:
int(variable)
return variable
except ValueError:
print("We need an integer (number) here.")
getinput(variable,prompt)
num_of_articles = getinput(num_of_articles,"Enter number of articles: ")
num_of_reviewers = getinput(num_of_reviewers,"Enter number of reviewers: ")
print(num_of_articles)
print(num_of_reviewers)
This works fine if I put in good input, but not if I pass in a bad
value. Can anyone show me where I have gone astray? Thanks.
You called getinput() from inside getinput(), which is a recursive
call. So what happens is whenever the user makes a mistake, you have
two copies of the function running. And they get their own copies of
variables, which isn't what you want in this case. What you want
instead is to loop back to the beginning, not to call.
In this simple case, you can simply enclose the entire function in a
while True:
loop. And when the exception happens, you loop around back to the
beginning.
DaveA
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor