popwat
popwat

Reputation: 23

String formatting issue when using a function

I have what I believe to be an embarrassingly simple problem, but three hours of googling and checking stackoverflow have not helped.

Let's say I have a very simple piece of code:

def secret_formula(started):
  jelly_beans = started*500
  jars = jelly_beans/1000
  crates = jars/100
  return jelly_beans,jars,crates

start_point = 10000

print("We'd have {} beans, {} jars, and {} crates.".format(secret_formula(start_point)))

What happens is I get the "IndexError: tuple index out of range". So I just print the secret_formula function to see what it looks like, and it looks like this:

(5000000, 5000.0, 50.0)

Basically, it is treating the output as one 'thing' (I am still very new, sorry if my language is not correct). My question is, why does it treat it like this and how do I make it pass the three outputs (jelly_beans, jars, and crates) so that it formats the string properly?

Thanks!

Upvotes: 2

Views: 341

Answers (1)

Sylvain Defresne
Sylvain Defresne

Reputation: 44493

The format function of the string take a variable number of argument. The secret_formula function is returning a tuple. You want to convert that to a list of arguments. This is done using the following syntax:

print("We'd have {} beans, {} jars, and {} crates.".format(*secret_formula(start_point)))

The important par is the * character. It tell that you want to convert the following iterable into a list of argument to pass to the function.

Upvotes: 1

Related Questions