假定有下面这样的列表:
spam = ['apples', 'bananas', 'tofu', 'cats']
编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗
号和空格分隔,并在最后一个表项之前插入 and。例如,将前面的 spam 列表传递给函数,将返回
'apples, bananas, tofu, and cats'。但你的函数应该能够处理传递给它的任何列表。
————————————————
这是原题目,然后我编写了如下程序,求大神赐教错在哪里?
def change(spam):
i = 0
spell = spam[i]
while True:
i += 1
spell = spell +', '+ spam[i]
if i == len(spam):
break
return spell
spam = ['apples', 'bananas', 'tofu', 'cats', 'dogs']
example=change(spam)
print(example)
返回的值,本应该是'apples, bananas, tofu, and cats'
```apples, bananas
# -*- coding: UTF-8 -*-
def change(spam):
i = 0
spell = spam[i]
while True:
i += 1
if len(spam) >= 2 and i == len(spam) - 1:
spell = spell + ' and '
else:
spell = spell +', '
spell = spell + spam[i]
if i == len(spam) - 1:
break
return spell
spam = ['apples', 'bananas', 'tofu', 'cats', 'dogs']
example=change(spam)
print(example)
因为你的 break 条件是 i == len(spam) ,而 i 最开始先加了个1 ,所以你的循环实际上处理了下标为 1,2 的元素,少了下标 为 0 的元素。
吧 i+=1 放在一轮循环的最后一步就可以了。