我有一个有两个列表作为变量的类。它有一个对象,它应该将列表中的每个元素添加到(相当冗长的)字符串中,然后返回到主程序,最后通过打印。我使用for循环遍历列表并使用.join()将每个对象添加到字符串中,但我得到一个TypeError:"只能加入一个可迭代的"
这些清单包含在餐馆购买的商品的价格,所以只是浮动数字。
Class A:
def __init__(self, etc.):
self.__foods = []
self.__drinks = []
然后我有一个对象应该以预定的形式打印收据,然后将其作为字符串传递给主程序。
Class A:
...
def create_receipt(self):
food_price_string = "" # What is eventually joined to the main string
food_prices = self.__foods # What is iterated
for price in food_prices:
food_price_string.join(price) # TypeError here
food_price_string.join("\n") # For the eventual print
在这里我得到了TypeError - 程序拒绝加入'价格'变量到上面创建的字符串。我也应该为饮料价格做同样的事情,然后两者都将加入到其余的字符串中:
答案 0 :(得分:5)
这里有两个问题:
str.join
不会改变字符串(字符串是不可变的),返回一个新字符串;和 food_prices
可迭代这一事实并不重要,因为您使用for
循环,price
s是food_prices
的元素,因此您加入列表中的单个项目。
您可以重写程序,如:
def create_receipt(self):
food_prices = self.__foods
food_price_string = '\n'.join(str(price) for price in food_prices)
food_price_string += '\n' # (optional) add a new line at the end
# ... continue processing food_price_string (or return it)