无法在shell中获取代码以用作程序

时间:2016-11-20 08:39:34

标签: python

我正在通过" 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的同一个练习题还有其他几个主题(herehere),但我仍然被卡住了所以我继续发布。

4 个答案:

答案 0 :(得分:2)

input()返回一个字符串。在使用str.split

传递给函数之前,需要将字符串转换为列表
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'