找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4303|回复: 8

[求助] 新手求解答一个习题

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn 发表于 2017-3-20 22:42:55 | 显示全部楼层 |阅读模式
本帖最后由 ccwybatn 于 2017-3-20 22:44 编辑

新手,有个题目不懂,请教各个大神,我用的是python 3
题目是写一个函数,让它可以将一个列表里的各项都用空格连起来,然后最后一个加上and
例如列表为['a','b','c','d'],让这个列表通过函数变成为 a b c and d这样。
这个是我写的
  1. def add(spam):
  2.       str1=''
  3.       for i in spam:
  4.           if spam==spam[-1]:
  5.                str1=str1+' and '+spam
  6.           else:
  7.              str1=str1+' '+spam#为什么不对?
  8.      return str1
复制代码

运行时会出现以下错误
Traceback (most recent call last):
  File "E:/python/将输入的列表连起来.py", line 11, in add
    str1=str1+' '+spam#为什么不对?
TypeError: list indices must be integers or slices, not str


回复

使用道具 举报

0

主题

24

帖子

24

积分

贫民

积分
24
leftloveu 发表于 2017-3-21 09:43:44 | 显示全部楼层
仅从你的代码来看,是因为参数spam并不是一个string类型的,自然没法用“+”和string类型连接起来。
另外就是关于实现函数,如果只是为了达到你的目的:“例如列表为['a','b','c','d'],让这个列表通过函数变成为 a b c and d这样”,我想可以这样实现:

  1. def add_list(spam):
  2.     spam.insert(-1, 'and')
  3.     return " ".join(spam)

  4. print add_list(['a', 'b', 'c', 'd'])
  5. >> a b c and d
复制代码
回复 支持 2 反对 0

使用道具 举报

0

主题

24

帖子

24

积分

贫民

积分
24
leftloveu 发表于 2017-3-21 11:51:01 | 显示全部楼层
ccwybatn 发表于 2017-3-21 11:02
上面可能是编辑器的问题,我开始想写的是,所以我想问的是为什么写成这个不是字符串类型呢? ...

你把遍历的方法弄混了。举个例子:

  1. >>> spam = ['a', 'b', 'c', 'd']
  2. >>> for i in spam:
  3.         print i

  4. a
  5. b
  6. c
  7. d
  8. >>> for i in range(len(spam)):
  9.         print spam[i]

  10. a
  11. b
  12. c
  13. d
复制代码

第一种就是直接对list里面的内容进行遍历,第二种是用了索引来进行遍历。
你的用法是第一种。
回复 支持 1 反对 0

使用道具 举报

8

主题

20

帖子

20

积分

贫民

积分
20
wanan7 发表于 2017-3-21 09:31:47 | 显示全部楼层
  1.     spam = ['a','b','c','d']
  2.     str1=''
  3.     for i in spam:
  4.         if i==spam[-1]:
  5.              str1=str1+' and '+i
  6.         else:
  7.            str1=str1+' '+i
  8.     print str1
复制代码
回复 支持 反对

使用道具 举报

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn  楼主| 发表于 2017-3-21 10:57:08 | 显示全部楼层
本帖最后由 ccwybatn 于 2017-3-21 11:00 编辑

谢谢,程序正确了,但是我想了解一下为什么是写在i,而写成
  1. spam[i]
复制代码

就不对了呢?
回复 支持 反对

使用道具 举报

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn  楼主| 发表于 2017-3-21 11:02:07 | 显示全部楼层
leftloveu 发表于 2017-3-21 09:43
仅从你的代码来看,是因为参数spam并不是一个string类型的,自然没法用“+”和string类型连接起来。
另外就 ...

上面可能是编辑器的问题,我开始想写的是
  1. str1= str1+spam[i]
复制代码
,所以我想问的是为什么写成
  1. spam[i]
复制代码
这个不是字符串类型呢?
回复 支持 反对

使用道具 举报

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn  楼主| 发表于 2017-3-21 11:48:53 | 显示全部楼层
哦,我明白了,刚才测试了一下这个代码
  1. for i in spam:
  2.     print(i)
复制代码
得到一个结论,i是spam里的元素,并不数字,C语言中i是用来做脚标的,我搞混了
回复 支持 反对

使用道具 举报

8

主题

20

帖子

20

积分

贫民

积分
20
wanan7 发表于 2017-3-21 14:39:49 | 显示全部楼层
回复

使用道具 举报

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn  楼主| 发表于 2017-3-21 19:16:58 | 显示全部楼层
leftloveu 发表于 2017-3-21 11:51
你把遍历的方法弄混了。举个例子:

第一种就是直接对list里面的内容进行遍历,第二种是用了索引来进行遍 ...

谢谢,明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表