F-string usage in a print()
future_value = 0 for i in range(years): # for i in range(months): future_value += monthly_investment future_value = round(future_value, 2) # monthly_interest_amount = future_value * monthly_interest_rate # future_value += monthly_interest_amount # display the result print(f"Year = ", years + f"Future value = \n", future_value)When joining a string with a number, use an f-string otherwise, code a str() because a implicit convert of an int to str causes a TypeError!Well...WTF! Am I not using the f-string function correctly...in the above line of code??? Caddy Man Good sense makes one slow to anger, and it is his glory tooverlook an offense. Proverbs 19:11 -- https://mail.python.org/mailman/listinfo/python-list
Re: F-string usage in a print()
On 2022-05-24 22:14, Kevin M. Wilson via Python-list wrote: future_value = 0 for i in range(years): # for i in range(months): future_value += monthly_investment future_value = round(future_value, 2) # monthly_interest_amount = future_value * monthly_interest_rate # future_value += monthly_interest_amount # display the result print(f"Year = ", years + f"Future value = \n", future_value)When joining a string with a number, use an f-string otherwise, code a str() because a implicit convert of an int to str causes a TypeError!Well...WTF! Am I not using the f-string function correctly...in the above line of code??? There's no implicit conversion. An f-string always gives you a string. 'years' is an int, f"Future value = \n" is a str, and you can't add an int and a str. Maybe you meant this: print(f"Year = {i}, Future value = {future_value}") or this: print(f"Year = {i + 1}, Future value = {future_value}") These are equivalent to: print("Year = {}, Future value = {}".format(i, future_value)) and: print("Year = {}, Future value = {}".format(i + 1, future_value)) -- https://mail.python.org/mailman/listinfo/python-list
Re: F-string usage in a print()
Try something like: print(f"Year = {years}, Future value = {future_value}") On Tue, 2022-05-24 at 21:14 +, Kevin M. Wilson via Python-list wrote: > future_value = 0 > for i in range(years): > # for i in range(months): > future_value += monthly_investment > future_value = round(future_value, 2) > # monthly_interest_amount = future_value * monthly_interest_rate > # future_value += monthly_interest_amount > # display the result > print(f"Year = ", years + f"Future value = \n", future_value)When > joining a string with a number, use an f-string otherwise, code a > str() because a implicit convert of an int to str causes a > TypeError!Well...WTF! Am I not using the f-string function > correctly...in the above line of code??? > Caddy Man > > Good sense makes one slow to anger, and it is his glory tooverlook an > offense. > > Proverbs 19:11 > -- https://mail.python.org/mailman/listinfo/python-list
Re: F-string usage in a print()
On 5/24/22 15:14, Kevin M. Wilson via Python-list wrote: > future_value = 0 > for i in range(years): > # for i in range(months): >future_value += monthly_investment >future_value = round(future_value, 2) ># monthly_interest_amount = future_value * monthly_interest_rate ># future_value += monthly_interest_amount ># display the result >print(f"Year = ", years + f"Future value = \n", future_value)When joining > a string with a number, use an f-string otherwise, code a str() because a > implicit convert of an int to str causes a TypeError!Well...WTF! Am I not > using the f-string function correctly...in the above line of code??? As noted elsewhere, your f-strings by themselves are fine, it isn't complaining about those, though they're kind of silly as they don't do any formatting that justifies entering them as f-strings. It's complaining about this piece: years + f"Future value = \n" which is the second of the three comma-separated argument to print(). That's the int + string the error is grumping about. -- https://mail.python.org/mailman/listinfo/python-list
Re: F-string usage in a print()
On 24May2022 21:14, Kevin M. Wilson wrote: >future_value = 0 >for i in range(years): ># for i in range(months): > future_value += monthly_investment > future_value = round(future_value, 2) > # monthly_interest_amount = future_value * monthly_interest_rate > # future_value += monthly_interest_amount > # display the result > print(f"Year = ", years + f"Future value = \n", future_value) > >When joining a string with a number, use an f-string otherwise, code a >str() because a implicit convert of an int to str causes a >TypeError!Well...WTF! Am I not using the f-string function >correctly...in the above line of code??? The short answer is that you cannot add (the "+" operator) a string to an integer in Python because one is a numeric value and one is a text value. You would need to convert the int to a str first if you really wanted to. But in your code above, you don't need to. Let's pick apart that print(): print( f"Year = ", years + f"Future value = \n", future_value ) Like any function, print()'s arguments are separate by commas. So you've got 3 expressions there. The problematic expression looks like this one: years + f"Future value = \n" You didn't supply a complete runnable example so we don't see "years" get initialised. However, I assume it is an int because range() only accepts ints. You can't add an int to a str. Now, print() converts all its arguments to strings, so there's no need for f-strings anywhere in this. I'd go: print("Year =", years, "Future value =", future_value) myself. If you really want that newline, maybe: print("Year =", years, "Future value =") print(future_value) Format strings are for embedding values inside strings, which you don't need to do in your code as written. And whether you wrote: years + f"Future value = \n" or: years + "Future value = \n" (because that string has no embedded values) it is still wrong because years is an int and the string is still a str. You _could_ use an f-string to compute the whole print line in one go: print(f"Year = {years} Future value = \n{future_value}") but I can't see the point, personally. I've code from people who prefer that form though. BTW, it helps people to help you if you supply a complete example. Your example code did not initialise years or monthly_investment, and so will not run for someone else. It also helps to winnow it down to the smallest example you can which still shows the problem. FOr yoru example you could have reduced things to this, perhaps: years = 9 years + f"Future value = \n" Cheers, Cameron Simpson -- https://mail.python.org/mailman/listinfo/python-list
Re: F-string usage in a print()
On 25May2022 00:13, Kevin M. Wilson wrote: >Cameron, I have a misunderstanding here, the 'f-string' is used when >the str() is not...isn't it! No, f-strings (format strings) are just a convenient way to embed values in a string. The result is a string. In days of yore the common formatting method was the % operator like C's printf() format. You could do stuff like this: print("%s: length is %d items" % (thing, len(thing))) which would print something like: Thing5: length is 12 items Ignore the print() itself, that's just how you might use this: format a string with 2 values, then print it out for a person to read. You can do various things with %-formatting, but it is pretty limited and a bit prone to pairing things up incorrectly (human error making the "(thing, len(thing,len(thing)))" tuple) because those values are separates from the string itself. The funky new thing is format strings, where you can write: print(f"{thing}: length is {len(thing)} items") Again ignore the print(), we're really just interested in the expression: f"{thing}: length is {len(thing)} items" which does the same thing as the %-format earlier, but more readably and conveniently. I suspect you think they have another purpose. Whereas I suspect you're actaully trying to do something inappropriate for a number. If you've come here from another language such as PHP you might expect to go: print(some_number + some_string) In Python you need compatible types - so many accidents come from mixing stuff up. You may know that print()'s operation is to take each expression you give it and call str() on that value, then print that string. f-strings have a similar operation: each {expression} inside one is converted to a string for embedding in the larger format string; that is also done with str() unless you've added something special in the {} part. Aside from output you should not expect to be adding strings and numbers; - it isn't normally a sensible thing to do. And when printing things, you need text (strings). But print() takes can of that by passing every value to str(), which returns a string (in a manner appropriate to the type of value). You only want f-strings or manual joining up if you don't want the default separator between items (a space). Can you elaborate on _why_ you wanted an f-string? What were you doing at the time? Cheers, Cameron Simpson -- https://mail.python.org/mailman/listinfo/python-list