Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Kent Johnson
On Sat, Aug 16, 2008 at 1:22 AM, Joseph Bae [EMAIL PROTECTED] wrote:

 convertTo == C and convertToCelsius(temp) or
 convertToFahrenheit(temp)

This idiom has a pitfall. Consider
  A and B or C

If B can evaluate to a false value, such as None or 0, the expression
will not do what you intend. This idiom is only safe when you are sure
that B will never evaluate to false.

In Python 2.5 there is a better way to write it:

  B if A else C

This is a safer way to write your program.

Kent
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Lie Ryan
On Sat, 2008-08-16 at 07:40 +0200, [EMAIL PROTECTED] wrote:
 Message: 1
 Date: Fri, 15 Aug 2008 22:22:00 -0700
 From: Joseph Bae [EMAIL PROTECTED]
 Subject: Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is
 not defined
 To: Alan Gauld [EMAIL PROTECTED]
 Cc: tutor@python.org
 Message-ID:
 [EMAIL PROTECTED]
 Content-Type: text/plain; charset=iso-8859-1
 
 Thanks for the help!
 
 I have managed to get a good temperature converter program working! I
 am
 working on beefing it up a bit with some exception handling and an
 and-or
 trick. The error handling works okay but I am having problems using
 and-or.
 Here's my updated code:
 

You can fix some of these:

 def main():
 true = 1
 while true:

You can use True (note the capital (T)rue) for the boolean value of
True.

 try:
 temp = int(raw_input(Enter A Number : ))
 break
 except ValueError:
 print Invalid Input

Following the concept: Don't Make Me Repeat Myself, you could factor out
the input function:

def take_input(prompt, 
   validator = int, 
   errormessage = 'Invalid Input', 
   exceptions = (ValueError, )):
'''
prompt - String to be printed before raw_input
validator - Function to be called after raw_input
errormessage - String to be printed if any exceptions in 
   exceptions is raised
exceptions - List/Tuple containing list of exceptions to caught
'''

while True:
print prompt, 
try:
return validator(raw_input())
except exceptions:
print errormessage

 while true:
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? :
 )
 if not convertTo == F and not convertTo == C:

If a boolean expression so simple looks complex, there is usually a
simpler version. Try learning boolean logic a little bit, specifically
boolean simplification for formal ways to simplify a boolean expression
(although many text about boolean logic subject is from electronic, the
basic rules are the same in programming and math).

 print Invalid Input
 *else:
 convertTo == C and convertToCelsius(temp) or
 convertToFahrenheit(temp)

Never use and-or trick except if you're writing for Python Obfuscation
Code Contest, they have huge pitfalls[1], the and-or trick was useful
before python got inline if (although Guido choose a frankly rather
unusual syntax):

true_value if expression else false_value

so your and-or trick should be:
convertToCelcius(temp) if convertTo == 'C' else
convertToFahrenheit(temp)

[1] in and-or hackery a problem arises for codes like this:
 b = 0
 c = 3
 True and b or c
3
 False and b or c
3

I'll leave it to you for brain exercise on why that thing happened

 break


 *
 def convertToCelsius(t):
 tC = (9.0/5.0) * (t - 32)
 print %d Fahrenheit = %d Celsius % (t, tC)

It's a bad idea for reusability to make convertToCelcius and
convertToFahrenheit print the result themselves, the function would be
more useful if it return the converted value and let the main program
print them. This way, the function could be used for other things as
well (for example, in a more complex temperature converter, rather than
typing out all to all converters, it's a much better idea to convert to
a common unit (say Kelvin, the SI standard for temperature), then
convert it again to the target unit. This is impossible to be done if
convertToCelcius prints the result themself.

i.e.:
def convertToCelcius(t):
return #Do some formula
t = 10
print '%s %s = %s %s' + (t, 'Fahrenheit', convertToCelcius(t),
'Celcius')

 def convertToFahrenheit(t):
 tF = (9.0/5.0) * (t + 32)
 print %d Celsius = %d Fahrenheit % (t, tF)
 
 if __name__==__main__:

it's not a must, you should see PEP 8 (it's the style guideline):
http://www.python.org/dev/peps/pep-0008/

 main()
 
 Sample Output (as of right now):
 
 Enter A Number : 50
 Convert to (F)ahrenheit or (C)elsius? C
 50 Fahrenheit = 32 Celsius
 32 Celsius = 147 Fahrenheit -- shouldn't show up and 147 is too
 high ...
 
 This only happens when I tell it to convert to C, if I say F it works
 normally. I've debugged it with pdb.set_trace() many times but can't
 figure
 out what's wrong. Help is much appreciated =)
 
 Thanks,
 
 Joe

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Matti/Tritlo
I too am a Beginner at python, and i have been playing around with it for
about a week. While playing around, i decided to make a calculator program
(A Very simple one) to calculate area and also to convert farenheit to
celcius and vice versa. So, here is the code:


def options():
print Options:
print  'p' to print options
print  's' for area of square
print  't' for area of triangle
print  'c' for area of square
print  'ce' to convert from celsius to farenheit
print  'fa' to convert from fahrenheit to celcius
print  'q' to quit the program
print Welcome to this calculator.
user = raw_input(So, What is your name? )
print Oh, Welcome , user,,I´ll be your calculator to day.
print Please select one of these options, and lets calculate!
print options()
def positive():
print Must be a positive number

def square_area(width, height):
return width * height

def triangle_area(width, height):
return width * height / 2

def circle_area (radius):
return radius * 3.141562953589793

def c_to_f(c_temp):
return 9.0 / 5.0 * c_temp + 32

def f_to_c(f_temp):
return (f_temp - 32.0) * 5.0 / 9.0

def choice():
choice = p
while choice != q:
choice = raw_input(Option: )
if choice == p:
print options()
elif choice == s:
print So, you have chosen to calculate the area of a
Square.
w = input(Please enter Width: )
while w = 0:
positive()
w = input(Please enter Width: )
h = input(Please enter Height: )
while h = 0:
positive()
h = input(Please enter Height: )
print The Square´s area is: , square_area(w,h)
elif choice == t:
print So, you have chosen to calculate the area of a
Triangle.
w = input(Please enter Width: )
while w = 0:
positive()
w = input(Please enter Width: )
h = input(Please enter Height: )
while h = 0:
positive()
h = input(Please enter Height: )
print The Triangle´s area is: , triangle_area(w,h)
elif choice == c:
print So, you have chosen to calculate the area of a
Circle.
r = input(Please enter radius: )
while r = 0:
positive ()
r = input(Please enter radius: )
print The Circle´s area is: , circle_area (r)
elif choice == ce:
print So, you´re wondering how Celcius relates to
Farenheit.
c = input(Please enter Celcius degree´s: )
print c, Degree´s Celcius are, c_to_f(c), Degree´s
Farenheit.
elif choice == fa:
print So, you´re wondering how Farenheit relates to
Celcius.
f = input(Please enter Farenheit degree´s: )
print f,Degree´s Farenheit are, f_to_c(f), Degree´s
Celcius.

else:
print That option does not exsist
choice = raw_input(Option: )
choice()
print Leaving eh, Well, Goodbye!
time.sleep(5)

There you can see the Farenheit - Celcius part, and also the simple menu
system.

Hope this Helps!
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Kent Johnson
On Sat, Aug 16, 2008 at 12:07 PM, Matti/Tritlo [EMAIL PROTECTED] wrote:

Some quick notes:

 print options()

No need for the 'print' here, options() already prints. The extra
print will print the return value of options(), which is None.

 def triangle_area(width, height):
 return width * height / 2

This will give an incorrect result if width and height are both odd
integers. Use 2.0 instead of 2 to force float division.

Kent
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Lie Ryan
On Sat, 2008-08-16 at 16:07 +, Matti/Tritlo wrote:
 I too am a Beginner at python, and i have been playing around with it
 for about a week. While playing around, i decided to make a calculator
 program (A Very simple one) to calculate area and also to convert
 farenheit to celcius and vice versa. So, here is the code:

Shall I give some comments on your code?

 def options():
 print Options:
 print  'p' to print options
 print  's' for area of square
 print  't' for area of triangle
 print  'c' for area of square 
 print  'ce' to convert from celsius to farenheit
 print  'fa' to convert from fahrenheit to celcius
 print  'q' to quit the program
 print Welcome to this calculator.
 user = raw_input(So, What is your name? )
 print Oh, Welcome , user,,I´ll be your calculator to day.
 print Please select one of these options, and lets calculate!
 print options()
 def positive():
 print Must be a positive number
 
 def square_area(width, height):
 return width * height
 
 def triangle_area(width, height):
 return width * height / 2
 
 def circle_area (radius):
 return radius * 3.141562953589793
 
 def c_to_f(c_temp):
 return 9.0 / 5.0 * c_temp + 32
  
 def f_to_c(f_temp):
 return (f_temp - 32.0) * 5.0 / 9.0
 
 def choice():
 choice = p
 while choice != q:
 choice = raw_input(Option: )
 if choice == p:
 print options()
 elif choice == s:
 print So, you have chosen to calculate the area of a
 Square.
 w = input(Please enter Width: )

never use input(), use raw_input() instead. input() parses the string it
receives first, and may (read: WILL in the hands of certain persons)
allow user to input certain strings that get parsed into dangerous
codes. Use int(raw_input()) instead to convert the result of raw_input
(i.e. string) into a number (i.e. integer). Since we're using int() to
convert the string into number now, if you typed non-numbers, you'd get
an Exception/Error, so you should add a try: block that would -- in case
of errors -- reask the user again.


try:
   int('string')
except ValueError:
   print 'You passed a string that cannot be turned into integer'


 while w = 0:
 positive()
 w = input(Please enter Width: )
 h = input(Please enter Height: )
 while h = 0:
 positive()
 h = input(Please enter Height: )
 print The Square´s area is: , square_area(w,h)
 elif choice == t:
 print So, you have chosen to calculate the area of a
 Triangle.
 w = input(Please enter Width: )
 while w = 0:
 positive()
 w = input(Please enter Width: )
 h = input(Please enter Height: )
 while h = 0:
 positive()
 h = input(Please enter Height: )
 print The Triangle´s area is: , triangle_area(w,h)

Don't you think that all those codes seems very similar and redundant
and tiring to type? Then make it into a function, pass arguments to make
the behavior of the function differs and cut short a lot of lines.

def getanumber(prompt):
h = int(raw_input(prompt))
while h = 0:
positive()
h = int(raw_input(prompt))
return h

...
elif choice == 't':
print So, you have chosen to calculate the area of a Triangle.
w = getanumber(Please enter Width: )
h = getanumber(Please enter Height: )
print The Triangle´s area is: , triangle_area(w,h)
elif choice
...

Ok, now we're left with that, which is still redundant since the pattern
of print, get input values, and print output values is still repeated.
Personally I'd go even further to make them functions too, but I'll let
you pass with that (why? because: since not all menu options require the
same number of argument it'd require using a clever trick involving
list/dictionary and for-loop iteration, for now I think it might be out
of bounds). 

PS: If you're really interested in how your program can still even be
made more concise and less redundant, see way below for a raw,
uncommented, !untested! code.

 
 elif choice == c:
 print So, you have chosen to calculate the area of a
 Circle.
 r = input(Please enter radius: )
 while r = 0:
 positive ()
 r = input(Please enter radius: )
 print The Circle´s area is: , circle_area (r)
 elif choice == ce:
 print So, you´re wondering how Celcius relates to
 Farenheit.
 c = input(Please enter Celcius degree´s: )
 print c, Degree´s Celcius are, c_to_f(c), Degree´s
 Farenheit.
 elif choice == fa:
 print So, you´re wondering how 

Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-16 Thread Kent Johnson
On 8/16/08, Lie Ryan [EMAIL PROTECTED] wrote:
 never use input(), use raw_input() instead. input() parses the string it
 receives first, and may (read: WILL in the hands of certain persons)
 allow user to input certain strings that get parsed into dangerous
 codes. Use int(raw_input()) instead to convert the result of raw_input
 (i.e. string) into a number (i.e. integer).

Probably float(raw_input()) would be better in this program.

Kent
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-15 Thread Joseph Bae
Thanks for the help!

I have managed to get a good temperature converter program working! I am
working on beefing it up a bit with some exception handling and an and-or
trick. The error handling works okay but I am having problems using and-or.
Here's my updated code:

def main():
true = 1
while true:
try:
temp = int(raw_input(Enter A Number : ))
break
except ValueError:
print Invalid Input
while true:
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )
if not convertTo == F and not convertTo == C:
print Invalid Input
*else:
convertTo == C and convertToCelsius(temp) or
convertToFahrenheit(temp)
break
*
def convertToCelsius(t):
tC = (9.0/5.0) * (t - 32)
print %d Fahrenheit = %d Celsius % (t, tC)

def convertToFahrenheit(t):
tF = (9.0/5.0) * (t + 32)
print %d Celsius = %d Fahrenheit % (t, tF)

if __name__==__main__:
main()

Sample Output (as of right now):

Enter A Number : 50
Convert to (F)ahrenheit or (C)elsius? C
50 Fahrenheit = 32 Celsius
32 Celsius = 147 Fahrenheit -- shouldn't show up and 147 is too high ...

This only happens when I tell it to convert to C, if I say F it works
normally. I've debugged it with pdb.set_trace() many times but can't figure
out what's wrong. Help is much appreciated =)

Thanks,

Joe

On Thu, Aug 14, 2008 at 10:50 PM, Alan Gauld [EMAIL PROTECTED]wrote:

 Joseph Bae [EMAIL PROTECTED] wrote

  temp = input(Enter A Number : )
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

 if convertTo == F:
   convertedTemp = convertToFahrenheit(temp)
   print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
 else:
   convertedTemp = convertToCelsius(temp)
   print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

 def convertToFahrenheit(t):
   tF = (9.0/5.0) * (t + 32)
   return tF

 def convertToCelsius(t):
   tC = (9.0/5.0) * (t - 32)
   return tC

 convertedTemp = convertToFahrenheit(temp)
 NameError: name 'convertToFahrenheit' is not defined

 This is most likely a very simple error, but can someone please clarify
 for
 me why it's behaving this way?


 Others have explained that you need to execute the function
 definitions before Python sees the name. You can do this in
 two ways depending on taste.
 1) As suggested move your main code below the function definitions.
 2) move your main code into a function - traditionally called main()
   then call main as the last line of your code.

 The second method has two advantages:
 1) It maintains the top-down design style if thats your preferred style
 2) It makes it much easier to make the file into a reusable module.

 It has two minor disadvantages:

 1) The extra function call (main() ) slows things down by a tiny amount
 2) the extra indentation level of being inside a function reduces the page
   width slightly

 HTH,

 --
 Alan Gauld
 Author of the Learn to Program web site
 http://www.freenetpages.co.uk/hp/alan.gauld

 ___
 Tutor maillist  -  Tutor@python.org
 http://mail.python.org/mailman/listinfo/tutor

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-15 Thread Joseph Bae
Sorry! I copied the sample output from my command prompt incorrectly.

Correct sample output:

Enter A Number : 50
Convert to (F)ahrenheit or (C)elsius? C
50 Fahrenheit = 32 Celsius
*50 *(not 32) Celsius = 147 Fahrenheit

Joe

On Fri, Aug 15, 2008 at 10:22 PM, Joseph Bae [EMAIL PROTECTED] wrote:

 Thanks for the help!

 I have managed to get a good temperature converter program working! I am
 working on beefing it up a bit with some exception handling and an and-or
 trick. The error handling works okay but I am having problems using and-or.
 Here's my updated code:

 def main():
 true = 1
 while true:
 try:
 temp = int(raw_input(Enter A Number : ))
 break
 except ValueError:
 print Invalid Input
 while true:
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )
 if not convertTo == F and not convertTo == C:
 print Invalid Input
 *else:
 convertTo == C and convertToCelsius(temp) or
 convertToFahrenheit(temp)
 break
 *
 def convertToCelsius(t):
 tC = (9.0/5.0) * (t - 32)
 print %d Fahrenheit = %d Celsius % (t, tC)

 def convertToFahrenheit(t):
 tF = (9.0/5.0) * (t + 32)
 print %d Celsius = %d Fahrenheit % (t, tF)

 if __name__==__main__:
 main()

 Sample Output (as of right now):

 Enter A Number : 50
 Convert to (F)ahrenheit or (C)elsius? C
 50 Fahrenheit = 32 Celsius
 32 Celsius = 147 Fahrenheit -- shouldn't show up and 147 is too high ...

 This only happens when I tell it to convert to C, if I say F it works
 normally. I've debugged it with pdb.set_trace() many times but can't figure
 out what's wrong. Help is much appreciated =)

 Thanks,

 Joe


 On Thu, Aug 14, 2008 at 10:50 PM, Alan Gauld [EMAIL PROTECTED]wrote:

 Joseph Bae [EMAIL PROTECTED] wrote

  temp = input(Enter A Number : )
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

 if convertTo == F:
   convertedTemp = convertToFahrenheit(temp)
   print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
 else:
   convertedTemp = convertToCelsius(temp)
   print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

 def convertToFahrenheit(t):
   tF = (9.0/5.0) * (t + 32)
   return tF

 def convertToCelsius(t):
   tC = (9.0/5.0) * (t - 32)
   return tC

 convertedTemp = convertToFahrenheit(temp)
 NameError: name 'convertToFahrenheit' is not defined

 This is most likely a very simple error, but can someone please clarify
 for
 me why it's behaving this way?


 Others have explained that you need to execute the function
 definitions before Python sees the name. You can do this in
 two ways depending on taste.
 1) As suggested move your main code below the function definitions.
 2) move your main code into a function - traditionally called main()
   then call main as the last line of your code.

 The second method has two advantages:
 1) It maintains the top-down design style if thats your preferred style
 2) It makes it much easier to make the file into a reusable module.

 It has two minor disadvantages:

 1) The extra function call (main() ) slows things down by a tiny amount
 2) the extra indentation level of being inside a function reduces the page
   width slightly

 HTH,

 --
 Alan Gauld
 Author of the Learn to Program web site
 http://www.freenetpages.co.uk/hp/alan.gauld

 ___
 Tutor maillist  -  Tutor@python.org
 http://mail.python.org/mailman/listinfo/tutor



___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-15 Thread Steve Willoughby

Joseph Bae wrote:

Thanks for the help!

I have managed to get a good temperature converter program working! I am
working on beefing it up a bit with some exception handling and an and-or
trick. The error handling works okay but I am having problems using and-or.
Here's my updated code:

def main():
true = 1
while true:
try:
temp = int(raw_input(Enter A Number : ))
break
except ValueError:
print Invalid Input
while true:
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )
if not convertTo == F and not convertTo == C:


this might be easier to read as:
  if convertTo != F and convertTo != C:

or even:
  if convertTo not in (F, C):


print Invalid Input
*else:
convertTo == C and convertToCelsius(temp) or
convertToFahrenheit(temp)


I'd caution you against using and/or like this as a control flow 
pattern.  It can be very confusing compared to this:


  if convertTo == C:
  convertToCelsius(temp)
  else:
  convertToFahrenheit(temp)

Note that the and/or pattern hides the bug you're facing.  What you're 
really doing with the and/or pattern is this:


  if convertTo == C:
  if not convertToCelsuis(temp):
  convertToFahrenheit(temp)
  else:
  convertToFahrenheit(temp)

So what you had will call convertToCelsuis(temp) AND if that didn't 
return a true value, will ALSO call convertToFahrenheit(temp).


Since convertToCelsius() doesn't return a value at all, that's exactly 
what happened.



break
*
def convertToCelsius(t):
tC = (9.0/5.0) * (t - 32)
print %d Fahrenheit = %d Celsius % (t, tC)

def convertToFahrenheit(t):
tF = (9.0/5.0) * (t + 32)
print %d Celsius = %d Fahrenheit % (t, tF)


That's not the correct calculation.

C = (F - 32) / 1.8

F = (C * 1.8) + 32



if __name__==__main__:
main()

Sample Output (as of right now):

Enter A Number : 50
Convert to (F)ahrenheit or (C)elsius? C
50 Fahrenheit = 32 Celsius
32 Celsius = 147 Fahrenheit -- shouldn't show up and 147 is too high ...

This only happens when I tell it to convert to C, if I say F it works
normally. I've debugged it with pdb.set_trace() many times but can't figure
out what's wrong. Help is much appreciated =)

Thanks,

Joe

On Thu, Aug 14, 2008 at 10:50 PM, Alan Gauld [EMAIL PROTECTED]wrote:


Joseph Bae [EMAIL PROTECTED] wrote

 temp = input(Enter A Number : )

convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

if convertTo == F:
  convertedTemp = convertToFahrenheit(temp)
  print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
else:
  convertedTemp = convertToCelsius(temp)
  print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

def convertToFahrenheit(t):
  tF = (9.0/5.0) * (t + 32)
  return tF

def convertToCelsius(t):
  tC = (9.0/5.0) * (t - 32)
  return tC

convertedTemp = convertToFahrenheit(temp)
NameError: name 'convertToFahrenheit' is not defined

This is most likely a very simple error, but can someone please clarify
for
me why it's behaving this way?


Others have explained that you need to execute the function
definitions before Python sees the name. You can do this in
two ways depending on taste.
1) As suggested move your main code below the function definitions.
2) move your main code into a function - traditionally called main()
  then call main as the last line of your code.

The second method has two advantages:
1) It maintains the top-down design style if thats your preferred style
2) It makes it much easier to make the file into a reusable module.

It has two minor disadvantages:

1) The extra function call (main() ) slows things down by a tiny amount
2) the extra indentation level of being inside a function reduces the page
  width slightly

HTH,

--
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor






___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-14 Thread Joseph Bae
Hi all,

I'm new to Python (and programming in general) and need some help!

Here is my code so far for a temperature conversion program (converts
between Fahrenheit and Celsius):



temp = input(Enter A Number : )
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

if convertTo == F:
convertedTemp = convertToFahrenheit(temp)
print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
else:
convertedTemp = convertToCelsius(temp)
print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

def convertToFahrenheit(t):
tF = (9.0/5.0) * (t + 32)
return tF

def convertToCelsius(t):
tC = (9.0/5.0) * (t - 32)
return tC



It worked fine without having extra functions but once I put
convertToFahrenheit and convertToCelsius in (just for practice really), this
happened:

Enter A Number : 50
Convert to (F)ahrenheit or (C)elsius? : F
Traceback (most recent call last):
 File TemperatureConverter.py, line 5, in module
  convertedTemp = convertToFahrenheit(temp)
NameError: name 'convertToFahrenheit' is not defined

This is most likely a very simple error, but can someone please clarify for
me why it's behaving this way?

Thanks!

Joe
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-14 Thread Josh Rosen
In Python, def is an executable statement.  Your function is not  
defined until the def statement is run by Python.  If you move your  
function definitions earlier in the code so that your functions are  
defined before they're used, this code will run properly.


Josh R.

On Aug 14, 2008, at 4:08 PM, Joseph Bae wrote:


Hi all,

I'm new to Python (and programming in general) and need some help!

Here is my code so far for a temperature conversion program  
(converts between Fahrenheit and Celsius):




temp = input(Enter A Number : )
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

if convertTo == F:
convertedTemp = convertToFahrenheit(temp)
print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
else:
convertedTemp = convertToCelsius(temp)
print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

def convertToFahrenheit(t):
tF = (9.0/5.0) * (t + 32)
return tF

def convertToCelsius(t):
tC = (9.0/5.0) * (t - 32)
return tC



It worked fine without having extra functions but once I put  
convertToFahrenheit and convertToCelsius in (just for practice  
really), this happened:


Enter A Number : 50
Convert to (F)ahrenheit or (C)elsius? : F
Traceback (most recent call last):
 File TemperatureConverter.py, line 5, in module
  convertedTemp = convertToFahrenheit(temp)
NameError: name 'convertToFahrenheit' is not defined

This is most likely a very simple error, but can someone please  
clarify for me why it's behaving this way?


Thanks!

Joe
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-14 Thread Emad Nawfal (عماد نوفل)
On Thu, Aug 14, 2008 at 7:08 PM, Joseph Bae [EMAIL PROTECTED] wrote:

 Hi all,

 I'm new to Python (and programming in general) and need some help!

 Here is my code so far for a temperature conversion program (converts
 between Fahrenheit and Celsius):



 temp = input(Enter A Number : )
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

 if convertTo == F:
 convertedTemp = convertToFahrenheit(temp)
 print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
 else:
 convertedTemp = convertToCelsius(temp)
 print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

 def convertToFahrenheit(t):
 tF = (9.0/5.0) * (t + 32)
 return tF

 def convertToCelsius(t):
 tC = (9.0/5.0) * (t - 32)
 return tC



 It worked fine without having extra functions but once I put
 convertToFahrenheit and convertToCelsius in (just for practice really), this
 happened:

 Enter A Number : 50
 Convert to (F)ahrenheit or (C)elsius? : F
 Traceback (most recent call last):
  File TemperatureConverter.py, line 5, in module
   convertedTemp = convertToFahrenheit(temp)
 NameError: name 'convertToFahrenheit' is not defined

 This is most likely a very simple error, but can someone please clarify for
 me why it's behaving this way?


You just need to define the functions before you use them
Arranging the order od your program makes it work. Like this
def convertToFahrenheit(t):
tF = (9.0/5.0) * (t + 32)
return tF

def convertToCelsius(t):
tC = (9.0/5.0) * (t - 32)
return tC
temp = input(Enter A Number : )
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

if convertTo == F:
convertedTemp = convertToFahrenheit(temp)
print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
else:
convertedTemp = convertToCelsius(temp)
print %d Fahrenheit = %d Celsius % (temp, convertedTemp)





 Thanks!

 Joe

 ___
 Tutor maillist  -  Tutor@python.org
 http://mail.python.org/mailman/listinfo/tutor




-- 
لا أعرف مظلوما تواطأ الناس علي هضمه ولا زهدوا في إنصافه كالحقيقة.محمد
الغزالي
No victim has ever been more repressed and alienated than the truth

Emad Soliman Nawfal
Indiana University, Bloomington
http://emnawfal.googlepages.com

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-14 Thread Tuxicomane
Joseph Bae [EMAIL PROTECTED] writes:

 Hi all,

Hi ! (and sorry for my approximative English ... ;-)

 I'm new to Python (and programming in general) and need some help!

 Here is my code so far for a temperature conversion program
(converts between Fahrenheit and Celsius):

 temp = input(Enter A Number : )
 convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

 if convertTo == F:
 convertedTemp = convertToFahrenheit(temp)
 print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
 else:
 convertedTemp = convertToCelsius(temp)
 print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

 def convertToFahrenheit(t):
 tF = (9.0/5.0) * (t + 32)
 return tF

 def convertToCelsius(t):
 tC = (9.0/5.0) * (t - 32)
 return tC

 It worked fine without having extra functions but once I put
 convertToFahrenheit and convertToCelsius in (just for practice
 really), this happened:

 Enter A Number : 50
 Convert to (F)ahrenheit or (C)elsius? : F
 Traceback (most recent call last):
  File TemperatureConverter.py, line 5, in module
   convertedTemp = convertToFahrenheit(temp)
 NameError: name 'convertToFahrenheit' is not defined

 This is most likely a very simple error, but can someone please
 clarify for me why it's behaving this way?

Well, you have to define the function convertToFahrenheit *before* you use it !
Then it should work as you want ;-)

 Thanks!

 Joe

You're welcome (and apologizes for my bad and simple English :-)

-- 
Vivien Moreau.
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Beginner problem: name 'convertToFahrenheit' is not defined

2008-08-14 Thread Alan Gauld

Joseph Bae [EMAIL PROTECTED] wrote


temp = input(Enter A Number : )
convertTo = raw_input(Convert To (F)ahrenheit or (C)elsius? : )

if convertTo == F:
   convertedTemp = convertToFahrenheit(temp)
   print %d Celsius = %d Fahrenheit % (temp, convertedTemp)
else:
   convertedTemp = convertToCelsius(temp)
   print %d Fahrenheit = %d Celsius % (temp, convertedTemp)

def convertToFahrenheit(t):
   tF = (9.0/5.0) * (t + 32)
   return tF

def convertToCelsius(t):
   tC = (9.0/5.0) * (t - 32)
   return tC

 convertedTemp = convertToFahrenheit(temp)
NameError: name 'convertToFahrenheit' is not defined

This is most likely a very simple error, but can someone please 
clarify for

me why it's behaving this way?


Others have explained that you need to execute the function
definitions before Python sees the name. You can do this in
two ways depending on taste.
1) As suggested move your main code below the function definitions.
2) move your main code into a function - traditionally called main()
   then call main as the last line of your code.

The second method has two advantages:
1) It maintains the top-down design style if thats your preferred 
style

2) It makes it much easier to make the file into a reusable module.

It has two minor disadvantages:

1) The extra function call (main() ) slows things down by a tiny 
amount
2) the extra indentation level of being inside a function reduces the 
page

   width slightly

HTH,

--
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld 



___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor