ATBSWP第4章实践项目:逗号代码

时间:2016-03-24 01:20:49

标签: python list

所以练习项目如下:

假设您有一个像这样的列表值:spam = ['apples', 'bananas', 'tofu', 'cats'] 编写一个函数,该函数将列表值作为参数,并返回一个字符串,其中所有项由逗号和空格分隔,并在最后一项之前插入。例如,将先前的spam列表传递给函数将返回'apples, bananas, tofu, and cats'。但是你的函数应该能够处理传递给它的任何列表值。

到目前为止,我已经想出了这个:

spam = ['apples', 'bananas', 'tofu', 'cats']

def commacode(a_list):
    a_list.insert(-1, 'and')
    print(a_list)

commacode(spam)

当然输出只是列表值。我试图将第5行设为print(str(a_list)),但这会产生语法错误。我的想法是我必须把它改成字符串,但我迷路了。我错过了章节中的内容吗?我觉得我已经好几次了。我觉得len(a_list)应该在那里,但这只会给我一个值5。任何想法,或者我应该如何考虑这个将是很大的帮助。我总觉得我真的很了解这些东西,然后我开始接受这些练习项目,并且总是对于该怎么做感到困惑。我知道实践项目将使用我们在前几章中学到的一些信息,然后主要关注我们所在的章节。第4章仅列举了列表,列表值,字符串值,元组,copy.copy()copy.deepcopy()

链接 - Chapter4

16 个答案:

答案 0 :(得分:1)

这就是我解决问题的方法:

def commaCode(eggs):
    return ', '.join(map(str,eggs[:-1])) + ' and ' + str(eggs[-1])
spam = ['apples', 'bananas', 'tofu', 'cats']
print(commaCode(spam))

输出:

  苹果,香蕉,豆腐和猫

本章未讨论jo​​in()和map()。我在谷歌搜索如何将列表转换为字符串时学习了它们。

答案 1 :(得分:1)

我从Python和Al Sweigart的书开始。在第四章的这一点上,我还想尽办法解决这一问题。因此,我在这里找到了您的条目,并希望向社区展示我的解决方案(经过一段时间和几次尝试才能保持镇定):

def adapList(xList, xAdd):
    xList[-1] = xAdd + xList[-1]
    print(xList)

输入: adapList(spam, 'and ')

结果:

['apples', 'bananas', 'tofu', 'and cats']

请随时评论我的解决方案,很高兴从您的反馈中学习。

答案 2 :(得分:0)

尝试以下commacode功能:

monty = ['apples', 'bananas', 'tofu', 'cats', 'dogs', 'pigs']

def commacode(listname):  
    listname[len(listname) - 1] = 'and ' + listname[len(listname) - 1]  
    index = 0  
    new_string = listname[index]  
    while index < len(listname) - 1:
        new_string = new_string +  ', ' + listname[index + 1]  
        index = index + 1  
        if index == len(listname) - 1: 
            print(new_string)

commacode(monty)

答案 3 :(得分:0)

我自己认为Python不是新手,现在这不是我同意的最佳选择,但这就是我提出的。

def sentence(conc):

    print(str(conc[:-1]).strip('[]') + ' and ' + str(conc[-1]) + '. ')

spam = ['apples', 'bananas', 'tofu', 'cats']
ham = ['cats', 'dogs', 'badgers', 'mushrooms']
eggs = [1, 2, 3, 4]

sentence(spam)
sentence(ham)
sentence(eggs)

答案 4 :(得分:0)

使用本章的内容解决这个问题会导致一个非常冗长乏味的程序。相反,您可以使用join()函数[本章未给出]并通过一些调整,您甚至不需要使用map。

这是我的程序的样子:

def comma(a):
    list_string=','.join(a[0:-1])+' and '+str(a[-1])
    print(list_string)

spam=[]
while True:
    print('Enter the list item of index '+str(len(spam))+' (or enter nothing to stop)')
    item=input()
    if item=='':
        break
    spam= spam+[item]
print('The items are arranged as:')
comma(spam)

是的,在这个程序中,用户必须输入值(类似于章节中已解决的问题)

答案 5 :(得分:0)

只想分享我对此的解决方案,很想听听您的想法:

spam = ['apples', 'bananas', 'tofu', 'cats']
counter = 0

for i in spam:
  if counter < len(spam)-2:
    print(spam[counter] + ", ", end='')
    counter += 1

  elif counter == len(spam)-2:
    print(spam[-2] + " and " + spam[-1]) 
    counter += 1 

结果是:苹果,香蕉,豆腐和猫

答案 6 :(得分:0)

我还想与您分享我的解决方案。它使用join()。

def function(x):
    print(', '.join(x[:-1]) + ' and ' + x[-1])

spam=['apples', 'bananas', 'tofu','cats']
function(spam)

就第四章的锻炼而言,它就像一种魅力。

答案 7 :(得分:0)

这是我的解决方案。它利用了我们在本章中学到的所有知识。

def pr_list(listothings):

    for i in range(len(listothings)-1):
        print(listothings[i] + ', ', end='')

spam = ['apples', 'bananas', 'tofu', 'cats']

pr_list(spam)

print('and ' + spam[-1])

答案 8 :(得分:0)

这是我对问题的解决方案。

def commaCode(in_list):

    if (len(in_list) == 1):
        print(in_list[0])
    elif (len(in_list) == 0):
        print('Your list is empty.')
    else:
        for i in range(len(in_list) -1):
            print(in_list[i] + ', ', end='')

    if (len(in_list) > 1):
        print('and ' + in_list[-1] + '.')


input_list = ['apples', 'bananas', 'tofu', 'cats']
commaCode(input_list)

答案 9 :(得分:0)

这是对我有用的,我看到的唯一问题是在您输入苹果时,在文本的开头有一个空格。

spam = ['apples','bananas','tofu','cats']

print('Write tthe name of one of the items on the following list: '
  'apples, bananas, tofu, or cats')

listItem = input()
listItem = int(spam.index(listItem))

def function():
    print(*spam[:listItem], sep = ", " , end = " ")
    print(*spam[listItem+1:], sep = ", " , end = " ")
    print('and ' + spam[listItem])
function()

答案 10 :(得分:0)

我是python的新手,但是我对javascript有一定的了解,我为《用python自动完成无聊的事情》一书的“逗号代码”练习项目设计了此代码。

首先,我创建一个空列表。我要求用户输入一个值,该值将存储在我创建的空列表中。这一切都发生在while循环中,如果用户继续输入值,程序将继续将其添加到列表中,但是如果用户不是输入值,而是单击Enter,则程序将调用函数commaSpace(),然后中断循环。

对于commaSpace()函数,我创建了一个名为listaFinal的变量,该变量带有一个空字符串,以作为要存储列表索引并稍后打印的空间。

for循环中,我提出了两个条件。第一个条件表示如果x+1<len(lista)(这意味着除最后一个索引外的任何索引都将满足条件),则索引的值将存储在名为valorLista的变量中,然后添加{{1 }}。该值将存储在变量', '中。
对于第二个条件listaFinal(这是列表的最后一项),则该项目将存储在变量if x+1==len(lista)中,在该项目之前有一个valorLista,之后,它将被添加到变量'and '中。完成所有这些之后,程序将打印结果。

listaFinal

答案 11 :(得分:0)

我是Python和整个程序设计的新手,在很大程度上依靠“使无聊的东西自动化”来学习。根据本章中包含该项目的书中介绍的内容,这是我能想到的

def comma_code(list):
    new_list = []
    for i in range(len(list)-1):
        new_list.append(list[i] + ",")
    new_list.append("and " + list[-1])
 
    for i in new_list:
        print(i, end=" ")

comma_code(spam)

答案 12 :(得分:0)

好朋友!这是我的一点贡献。

list1 = []

def addGrocery(param1):
    print('Your list has ', end="")
    for i in range(len(param1)):
        if i < (len(param1) - 2):
            print(param1[i - 1] + ', ', end="")        
        elif i < (len(param1) - 1):
            print(param1[i - 1] + ' ', end="")
        else:
            print('and ' + param1[i - 1],end="")        

addMore = 'y'

while addMore == 'y':
    print('Enter the grocery item that you want to order')
    inp = input()
    list1.append(inp)
    print(list1[-1] + ' added')
    print('Do you want to add more groceries? - y/n')
    addMore = input().lower()

if addMore == 'n':
    addGrocery(list1)

答案 13 :(得分:0)

这是我只使用第 4 章之前教过的内容的方法。书中的说明提到代码应该如何仍然使用空列表。因此, try 和 except 块。在书中,作者也说过函数应该返回一个字符串,这就是为什么我没有在函数中放置print()。

spam = ['apples', 'bananas', 'tofu', 'cats']

def comma_code(a_list):
    compilation = '' #initiate an empty string to collect the values in the list
    try:
        while True:
            for i in a_list[:-1]: #only loop until the last item
                compilation += str(i) + ', '
            break
        return compilation + ' and ' + str(a_list[-1])
    except:
        return "It's empty yo. Give me a list to work with"
    
comma_code(spam)

我花了一个小时才弄清楚如何严格使用直到第 4 章的可用内容。

答案 14 :(得分:0)

def converster(item):
    stItem = ''
    new = ''
    for i in range(len(item)-1):
        stItem = str(item[i]) + ', '
        new = new + stItem
    new = new + 'and ' + str(item[-1]) 
    return new 
           
spam = ['apples', 'bananas', 'tofu', 'cats']
converster(spam)

答案 15 :(得分:0)

这是我的看法。请让我知道您的意见

def listToString (oneList):
    s = ''
    for i in range (len(spam)-1):
       s =  s+', ' + spam[i]
    s = s + ' and ' + spam[-1]
    s = s[2::]
    return s

spam = ['apples', 'bananas', 'tofu', 'cats']
print(listToString(spam))