EDIT: Ok, after some input from everyone here, I managed to make it work! I simplified it a lot to get rid of the long chains. Here's what I have:
def main():
var = (raw_input("Enter an integer: "))
a = get_number(var)
if a != False:
switch = by_three(int(a))
if switch == True:
return
else:
print "Try again!"
main()
else:
main()
def get_number(parameter):
if parameter.isdigit():
return parameter
else:
print "No, I said an INTEGER. \"%s\" is not an integer." % parameter
return False
def by_three(placeholder):
if placeholder % 3 == 0:
print "%d is divisible by 3. Isn't that terrific." % placeholder
return True
else:
print '%d is not divisible by 3. Boo hoo.' % placeholder
return False
print "Let's find an integer divisible by 3."
main()
Is there any reason I shouldn't go back to main() in my else statements? Is there another way to get the program to go back to the beginning?
——— I tried to build a simple command-line program for finding numbers divisible by 3. The idea is to keep asking for a number until the user picks one that's divisible by three. Here's my code:
def main():
print "Let's find an integer divisible by 3."
var = (raw_input("Enter an integer: "))
switch = False
get_number(var, switch)
while switch != True:
print "Try again!"
main()
def get_number(parameter, nd):
if parameter.isdigit():
by_three(int(parameter), nd)
return parameter, nd
else:
print "No, I said an INTEGER. \"%s\" is not an integer." % parameter
return parameter, False
def by_three(placeholder, tf):
if placeholder % 3 == 0:
print "%d is divisible by 3. Isn't that terrific." % placeholder
return placeholder, True
else:
print '%d is not divisible by 3. Boo hoo.' % placeholder
return placeholder, False
main()
OK, so here's what I thought was happening: variable switch gets passed to nd, which gets passed to tf. If the other variable (which goes var>parameter>placeholder) IS divisible by three, there's a return of True for tf—which should mean that the variable is now changed when I test it with "while."
That must not be what's happening—can someone explain how I'm misunderstanding things so badly? Passing variables around functions (and returning them!) is pretty confusing to me.
...
switch = False
get_number(var, switch)
while switch != True:
...
You have a variable, switch, which is False in the beginning. You send that to a function, and you check if it is True or not afterwards.
Let's consider the following program:
def changeVariable(a)
a = a * 2
a = 5
changeVariable(a)
print(a)
This program still prints 5, because basically stated: What you do in a function, stays in the function.
So, in your case, calling get_number(var, switch) and checking the value of switch does not make sense, because it will be False all the time.
You can use return statements. Then, you will have the output of your function.
Example:
def changeVariable(a)
a = a * 2
return a
a = 5
result = changeVariable(a)
print(a)
print(result)
The above code will print 5 and then 10.
When you define a function, the value that you return via return value is given to the function itself, not the arguments passed to the function.
For example,
def f(i,j):
i=1
j=2
return i,j
i=3
j=4
i,j=f(i,j)
will give i=1 and j=2, but
f(i,j)
will leave i and j unmodified (i=3 and j=4) because the scope of the variables inside the function is local.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With