help with a function

L

Lance Hoffmeyer

Hey all,

I'm new to python. I keep getting an error when running this.
I'm sure there is an easy fix but I can't figure it out.
What am I doing wrong? How do I fix it?

def even_odd_round(num):
if(round(num,2) + .5 == int(round(num,2)) + 1):
if(int(num,0) % 2): #an odd number
rounded_num = round(num,2) + .1
else: #an even number
rounded_num = round(num,2) - .1
rounded_num = int(rounded_num)
return rounded_num

even_odd_round(5.5)

Traceback (most recent call last):
File "<interactive input>", line 1, in ?
 
B

Ben Finney

Lance Hoffmeyer said:
def even_odd_round(num):
if(round(num,2) + .5 == int(round(num,2)) + 1):
if(int(num,0) % 2): #an odd number
rounded_num = round(num,2) + .1
else: #an even number
rounded_num = round(num,2) - .1
rounded_num = int(rounded_num)
return rounded_num

even_odd_round(5.5)

Traceback (most recent call last):
File "<interactive input>", line 1, in ?

Two problems.

One is the simple fact reported by the error message: you're
attempting to specify that a number object (already represented inside
Python as a number) should be converted using a particular base. (Why
you've chosen 0 as the base is beyond me.)

That only makes sense with a string of digit characters, where Python
needs to be told what numeric base each digit is (decimal, octal,
hexadecimal, whatever). It makes no sense for objects that are already
numbers, since they're not represented as digits in a base.

The other problem is specifying a base at all. Why not just convert
the object to an int using the default base?

If you're confused about how built-in types or functions work, you
should become familiar with the help system in the interpreter:

help(int)
 
P

Paul McGuire

Lance Hoffmeyer said:
Hey all,

I'm new to python. I keep getting an error when running this.
I'm sure there is an easy fix but I can't figure it out.
What am I doing wrong? How do I fix it?

def even_odd_round(num):
if(round(num,2) + .5 == int(round(num,2)) + 1):
if(int(num,0) % 2): #an odd number
rounded_num = round(num,2) + .1
else: #an even number
rounded_num = round(num,2) - .1
rounded_num = int(rounded_num)
return rounded_num

even_odd_round(5.5)

Traceback (most recent call last):
File "<interactive input>", line 1, in ?

1 def even_odd_round(num):
2 if(round(num,2) + .5 == int(round(num,2)) + 1):
3 if(int(num,0) % 2): #an odd number
4 rounded_num = round(num,2) + .1
5 else: #an even number
6 rounded_num = round(num,2) - .1
7 rounded_num = int(rounded_num)
8 return rounded_num
9
10 even_odd_round(5.5)
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "<interactive input>", line 3, in even_odd_round
TypeError: int() can't convert non-string with explicit base

This
 
P

Paul McGuire

Paul McGuire said:
1 def even_odd_round(num):
2 if(round(num,2) + .5 == int(round(num,2)) + 1):
3 if(int(num,0) % 2): #an odd number
4 rounded_num = round(num,2) + .1
5 else: #an even number
6 rounded_num = round(num,2) - .1
7 rounded_num = int(rounded_num)
8 return rounded_num
9
10 even_odd_round(5.5)

This error message tells us there is a problem on line 3, something to do
with the int() method call.

You have posted a number of posts this week, and it feels like you write a
bunch of code, run into a problem, then post it without trying to figure it
out. I don't mean to offend, but really, many of your questions are pretty
basic:
- how do I use regex's (to extract data from an easily split string of
space-delimited numbers)?
- how do I round a number?
- I get this traceback, what's wrong with my program?
Please read up on the Python tutorials, and learn how to use the interactive
help.

Overall, c.l.py is pretty newbie-friendly, and a "n00b" question every so
often is no big deal - but you've got to make more of an effort yourself.
There is also a tutorial mailing list that is - I started to say "more
geared for beginners", but we have plenty of lurker beginners on c.l.py, I'm
sure - I'd say the tutorial mailing list is more willing to handhold new
Python programmers.

And a posted "thanks" once in a while is not bad etiquette either.

-- Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top