使用Python自动化无聊的东西。逗号代码

时间:2017-04-30 16:29:11

标签: python

使用Python自动化无聊的东西中,有一个名为逗号代码的练习项目:

  

假设你有一个像这样的列表值:

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

编写一个以列表值作为参数并返回的函数   一个字符串,其中所有项目都以逗号和空格分隔,并带有'和'   在最后一项之前插入。例如,将之前的垃圾邮件列表传递给   该功能将返回苹果,香蕉,豆腐和猫等。但是你的功能   应该能够处理传递给它的任何列表值。

这就是我所做的:

y = ['apples', 'bananas', 'tofu', 'cats']
def function(x):
    x.insert(-1, ('and ' + x[-1]))
    del x[-1]
    numbers = len(x)
    spam = x[0]
    for i in range(1,numbers):
        spam = spam + ', ' + x[i]
    print(spam)

function(y)

该功能适用​​于任何列表值,我已完成它所要求的所有内容,但我想知道的是,是否有更好的方法来执行此操作,或者是否要求提供与此不同的内容。我也想知道我的代码有什么不好。我几天前开始阅读这本书,所以我对编码完全不熟悉。

14 个答案:

答案 0 :(得分:2)

解决方案浮现在脑海中:

# do add conditions to return list if len is <2
# perhaps return " and ".join(l) if len == 2
" ".join([", ".join(l[:-1] + ["and"]), l[-1]])
'a, b, and c'

答案 1 :(得分:1)

由于这是您第一次编码,为什么不这样做呢?这是您可以理解并“感觉直观”的东西。

y = ['apples', 'bananas', 'tofu', 'cats']
def create_description(items_list):
    description = ""
    for item in items_list[:-1]: #everything except for the last element
      description = description + item + ", "
    description = description + "and " + items_list[-1] # add the last item
    return description
print(create_description(y))

请注意,如果您只有一个项目,则会将其打印为and last_item

答案 2 :(得分:1)

非常基本的方法,这就是我喜欢它的原因:

a = ", ".join(y[:-1]) + " and " + y[-1]

join所有列表元素,但最后一个,并通过字符串添加添加。

答案 3 :(得分:1)

这是解决问题的一个非常简单的方法:

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

def items(things):
    for i in range(len(things) - 1):
        print(things[i] + ', ', end='')
    print('and ' + things[-1])

items(spam)

答案 4 :(得分:1)

这是我的代码:

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

def what_in_list(spam):
    spam[-1] = 'and ' + spam[-1]
    content_in_list = ''
    for i in spam:
        content_in_list += i + ',' + ' '
    print("'" + content_in_list[:-2] + "'.")

what_in_list(spam)

答案 5 :(得分:1)

仅使用您所知道的内容,&#34;使用Python自动化无聊的东西。&#34;

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

def commaCode(listValue):
    for i in range(len(listValue)-1):
        print(listValue[i], end=', ') # the end keyword argument was presented in ch.(3)
    print('and ' + listValue[-1])

commaCode(spam)

答案 6 :(得分:1)

我知道这是一个老问题,但我也只是学习用这本书编写代码。以下是我使用本书编写的代码,堆栈溢出以及各种其他资源。我是初学者,所以它就是这样。我确定有更高效的代码来执行此操作。

此代码将继续询问添加,删除和重述问题,以便您可以继续调整列表。直到你退出。

import sys

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

def items(myList):
    for i in range(len(myList) - 1):
        print(myList[i] + ', ', end ='')
    print('and ' + myList[-1])

def change():
    while True:
        print()        #print() gives it a blank space
        n = input("""
Do you want to add or remove from the list?

Do you want to restate the list?

    Type N to exit,
    Y for adding,
    R to remove
    L to restate list. """)
        print()               
        if n.lower() =='y':
            print()
            myList.insert(0, input('Insert what you want to add. '))
        elif n.lower() == 'r':
            print()
            name = input('Input item name you wish to remove. ')
            if name in myList:
                myList.remove(name)
        elif n.lower() == 'l':
            items(myList)
        elif n.lower() == 'n':
            sys.exit()

items(myList)
change()

答案 7 :(得分:0)

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

def makeString(l):
  stringPart1 = l[:-1] 
  stringPart2 = l[-1]
  finalString = ', '.join(stringPart1)+' and '+stringPart2
  return finalString

print(makeString(spam))  

<强> RESULT

apples, bananas, tofu and cats


# stringPart1 will be a list consist of following elements.
# stringPart1 = ['apples', 'bananas', 'tofu']
# 1[:-1] slice every thing from the 0 to last-1
# 
# stringPart2 will be a string.
# stringPart2 = 'cats'
# 1[-1] = return the item at the last index

答案 8 :(得分:0)

def comma_code(comma_list):

final_list = ''

for i in range(len(comma_list)-1):
    final_list = final_list  + comma_list[i] + ', '
final_list = final_list + ', and ' + comma_list[len(comma_list)-1]
print(final_list)

given_list = ['apples','香蕉','豆腐','猫']

comma_code(given_list)

答案 9 :(得分:0)

还有另一种简短的方法可以为此任务编译简单的代码:

def CommaCode(list):
    h = list[-2] + ' and ' + list[-1]
    for i in list[0:len(list)-2]:
        print(str(i), end = ', ')
    print(h)

如果您将其与垃圾邮件列表一起运行以进行检查:

CommaCode(spam)
apples, bananas, tofu and cats

答案 10 :(得分:0)

这是解决此问题的最简单的代码

export const Query: QueryResolvers.Resolvers = {
  async content(_, _args, { injector }: ModuleContext) {
    const response = await injector.get(Crs).getContent();
    return response;
  }
};

答案 11 :(得分:0)

这是我的代码。我知道可以改进,但是我只是一个初学者。如果有人提供建设性意见,我将有义务。

spam = ['apples', 'bananas', 'tofu', 'cats']
def commaSpace(listValue):
   for i in range(len(listValue)):
       print(listValue[i] + ', ' , end='')
       if listValue[i] == listValue[-1]:
        print('and ' + listValue[-1])
commaSpace(spam)

答案 12 :(得分:0)

我是一个初学者,但是最实际的解决方案似乎是使用“ join”方法。 我的尝试:

def concac(arg):
words = ''
for i in arg:
    words += i
    new = ",".join(arg[0:len(arg)-1]) + " and " + arg[-1]
    return new

答案 13 :(得分:-1)

我想出了一个相当简单的代码来解决这个问题。请看一下。

  spam = ['apples', 'bananas', 'tofu', 'cats']
  def list_to_string(value):
      value.insert(len(value)-1,'and')
      st = '' #empty string
      for i in value:
          st = st + ', ' + i #to concatenate the list values to a single string
      print st.lstrip(', ') #lstrip - to strip off the comma and space at the beginning of the string

 list_to_string(spam) #calling the function

我在此代码中发现的唯一问题是,我无法在'和'之后删除逗号。

其他方面,代码工作正常。

谢谢。