我正在通过" Automate the Boring Stuff with Python"预订并坚持其中一个练习题。我的解决方案在shell中工作,但是当我尝试将其作为程序运行时。这是问题提示:
假设你有一个像这样的列表值:
spam = ['apples', 'bananas', 'tofu', 'cats']
编写一个函数,该函数将列表值作为参数,并返回一个字符串,其中所有项由逗号和空格分隔,并在最后一项之前插入。例如,将之前的垃圾邮件列表传递给该函数将返回“苹果”,“香蕉”,“豆腐”和“猫”等。但是你的函数应该能够处理传递给它的任何列表值。
这是我的代码:
def listToString(usersList):
myStr = ', '.join(str(i) for i in usersList[0:-1]) # converts all but last list element to string and joins with commas
myStr = myStr + ' and ' + str(usersList[-1]) # adds on "and", converts final list element to string and adds to myStr
print(myStr)
myList = input()
listToString(myList)
当我在shell中定义一个列表并在其上运行上面的步骤时,我得到了我想要的结果:
'apples, bananas, tofu and cats'
但是当我尝试在上面的程序中将步骤组合在一起时,结果如下:
[, a, p, p, l, e, s, ,, , b, a, n, a, n, a, s, ,, , t, o, f, u, ,, , c, a, t, s and ]
有什么想法吗?
非常感谢您花时间阅读本文。关于SO的同一个练习题还有其他几个主题(here和here),但我仍然被卡住了所以我继续发布。
答案 0 :(得分:2)
myList = input().split() # 'apple banana' -> ['apple', 'banana']
否则,迭代字符串;将每个角色都作为项目。
>>> a_string = 'abcd'
>>> for x in a_string:
... print(x)
...
a
b
c
d
答案 1 :(得分:1)
您遇到问题,因为您获得的input
是一个字符串,而不是list
。
首先将输入转换为列表,然后运行您的函数。
尝试在输入上使用.split()
。
答案 2 :(得分:1)
当输入字符串时,确保输入为“split()”,将其转换为字符串:
def listToString(usersList):
myStr = ', '.join(str(i) for i in usersList[0:-1]) # converts all but last list element to string and joins with commas
myStr = myStr + ' and ' + str(usersList[-1]) # adds on "and", converts final list element to string and adds to myStr
print(myStr)
myList = input().split(',')
listToString(myList)
输入:
apples,bananas,tofu,cats
输出:
apples, bananas, tofu and cats
答案 3 :(得分:1)
您只需根据问题陈述详细信息加入列表,
def listToString(userList):
return ', '.join(userList[:-1]) + ' and ' + userList[-1]
执行:
In [13]: listToString(spam)
Out[13]: 'apples, bananas, tofu and cats'
现在,当您接受来自用户的列表时,您正在接受原始字符串, 您需要将其转换为列表。
In [16]: mylist = input()
'apples,bananas,tofu,cats'
In [19]: mylist.split(',')
Out[19]: ['apples', 'bananas', 'tofu', 'cats']
In [20]: userList = mylist.split(',')
In [21]: listToString(userList)
Out[21]: 'apples, bananas, tofu and cats'