# [Tutor] [Fwd: Re: trouble with "if"]

Alan Gauld alan.gauld at btinternet.com
Wed May 30 23:05:48 CEST 2007

```Hi Adam

> flaw in my loop.  It is not infinite.

In fact you don't have a loop, your program
is really just a simple sequence.

#Welcome screen:
def welcome():
print "Welcome to the Area Calculation Program."
print

welcome()

AG:Since you only call this once there is no point in putting
AG: it in a functuion

#Shape choice:
def shape():
print "Choose a Shape:"
print "1 Circle"
print "2 Square"
print "3 Triangle"
print "4 Exit"
print

shape()

AG: And you call this here and again at the end of the code.
AG: But its not in a loop, its just two calls to the same function.

#If circle:
def circle():
shape=raw_input(">")
if shape in["1","circle"]:
print "2 Diameter"
print "3 Circumference"
print "4 Area"
print

circle()

AG: And this gets a string fom the user and prints one of the
AG: values but doesn't do anything with it. Functions should
AG: normally do more than just print some values.
AG: You never use the menu you print.

circumference=(diameter*3.14)
print "Diameter",diameter
print "Circumference",circumference
print "Area",area
print
print

def choice():
given=raw_input(">")
choice()

AG: Now you call radius which actually does some work

shape()
choice()

AG: Then you call shape but don't use the result then call
AG: choice which only works for circles.

AG:If we use the more conventional approach of defining the
AG: functins first then calling them at the end your code
AG: looks like this:

welcome()
shape()
circle()
shape()
choice()

As you see there is no loop just a sequence of function calls.

Now if I rename your functions to reflect what theyactually do:

printWelcomeMessage()
getShapeAndIfCirclePrintCircleParameterNames()

Hopefully this illustrates several things:
1) Naming your functions to reflect what they actually do
helps see what the code does
2) Especially if you group the function calls together at the
and the getting of values.

A better structure might be to do something like:

shape = 0       # a variable to store the shape
printWelcomeMessage()
printShapeMenuAndGetValue()  #---store he result in the shape variable
if shape in['1','circle']:
doAllCircleStuff()
else: print "Only circles supported for now!"

And then its easy to wrap that in a real loop

shape = 0       # a variable to store the shape
printWelcomeMessage()
while shape == 0:
printShapeMenuAndGetValue()  #---store he result in the shape
variable
if shape in['1','circle']:
doAllCircleStuff()
shape = 0     # reset shape back to zero
else: print "Only circles supported for now!"

Can you rewrite your functions to match that? You need to change
the shape() function so that it sets the shape global variable to the
value input by the user. You will need to include the statement
global shape at the top of the function for that to work. The other
(and better) way is to use the return statement to return the value.

BTW I'm not really suggesting you use those long names,
they were just to point out what the functions were really doing!

HTH,

Alan G.

```