0

so I have

packs_purchased = (10, 6, 36)
dice_purchased = (2, 0, 1)
board_games_purchased = (3, 2, 0)

and

prices = (4.25, 125, 11, 50)

How do I get this for loop to return a list and not just the output

for packs_purchased in packs_purchased:
    if packs_purchased < 35:
        packs_spent = packs_purchased * prices[0]
    else:
        packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
    print("%.2f" % packs_spent)

right now it prints

42.50
25.50
125.00

and I want it to return a list, something like

packs_spent(42.50, 25.50, 125.00)
3
  • Append packs_spent to a list, and return that at the end. Commented Nov 3, 2021 at 3:16
  • BTW, don't use the same variable for the list and iteration variable for packs_purchased in packs_purchased:. Use something like for pack in packs_purchased: instead. Commented Nov 3, 2021 at 3:18
  • Also, packs_spent(42.50, 25.50, 125.00) is not a list. Commented Nov 3, 2021 at 3:24

4 Answers 4

1

Simply create a list prior to the for loop, and then append to that list instead of printing.

packs_spent = []
for pack in packs_purchased:
    if pack < 35:
        spent = pack * prices[0]
    else:
        spent = (int(math.floor(pack / 36)) * prices[1]) + ((pack % 36) * prices[0])
    packs_spent.append(spent)

print(packs_spent)
# [42.5, 25.5, 125.0]

To print with the proper number of decimal places, and in the format shown in the question, you can use a list comprehension:

print("packs_spent(", 
      ', '.join(f"{i:.2f}" for i in packs_spent),
      ")",
      sep="")
# packs_spent(42.50, 25.50, 125.00)
Sign up to request clarification or add additional context in comments.

Comments

0

Just declare an empty list and append results into that list.

packs_list = []    
for packs_purchased in packs_purchased:
   if packs_purchased < 35:
        packs_spent = packs_purchased * prices[0]
   else:
        packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
packs_list.append(packs_spent)
print(packs_list)

1 Comment

An explanation for the answer please?
0

There are a few silly mistakes in your Python code as well as some styling error (but we are not going there, as it's not that important).

The mistake includes, you are using same variable for iteration variable as well as for iterable, it can create major confusion when using the iterable for future use, and you might get int instead of tuple.

Also, side note, list comprehension has variable in local scope instead of global, so it will not create confusion, but still I recommend changing the iteration varable name.

@Green Cloak Guy have already stated the answer, but it can be improvised using list comprehension. It also helps in usage of slightly less memory than that of list, less usage of lines and also less time consumption. I would suggest using array by numpy, but let's leave it.

print([f'{packs * prices[0]:.2f}' if packs < 35 else f'{(int(math.floor(packs / 36)) * prices[1]) + ((packs % 36) * prices[0]):.2f}' for packs in packs_purchased])

OUTPUT:

>>> [42.50, 25.50, 125.00]

The output above is called list and not what you have stated in your desired output. If you want that output, you can do, just what @Green Cloak Guy did, but still here's an example:

CREATED_LIST = [f'{packs * prices[0]:.2f}' if packs < 35 else f'{(int(math.floor(packs / 36)) * prices[1]) + ((packs % 36) * prices[0]):.2f}' for packs in packs_purchased]
print(f'packs_spent({", ".join(CREATED_LIST)})')

OUTPUT:

>>> packs_spent(42.50, 25.50, 125.00)

Comments

0
import math
packs_purchased = (10, 6, 36)
dice_purchased = (2, 0, 1)
board_games_purchased = (3, 2, 0)
prices = (4.25, 125, 11, 50)

result = []
for packs_purchased in packs_purchased:
    if packs_purchased < 35:
        packs_spent = packs_purchased * prices[0]
    else:
        packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
    a = ("%.2f" % packs_spent)
    result.append(a)
    
result = list(map(float, result))
print("packs_spent:", (result))

1 Comment

Already answered in the same way above

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.