shmily1866 发表于 2020-6-22 23:55:11

做第16课课后题的时候想写个删除列表里的字符串的代码遇到好几个问题

问几个小问题,实在是小白,多担待

做第16课下面这道题的时候遇到一些问题
视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果


一、
代码开头我开头尝试用input输入一个列表,然后再剔除列表里的字符串,最后求和。
但是input输入的东西都被认定为字符串
x=input('请输入一个列表')
我输入

1.此时x是个字符串,无法用列表的命令进行操作。想着转换一下但是用list命令转换就全散了,如果我想直接输入一个列表或者元组,我该用什么命令替代input啊。
2.我尝试输入456,65,55,56,4,'ssd',455,'ssa'后,用split命令将字符串拆分,但是数字拆出来还是字符串,我尝试用int转换一下但是里面转换字符串会报错,
有什么方法批量把列表里的字符串数字转换为int类型啊?

二、
后来我又想着用切片的方法剔除字符串,这样列表元组都可以用
x=

for each in x:
        if type(each)==str:
                c=x.index(each)
                x=x[:c],x[(c+1):]

print(sum(x))

写了个这玩意,报错如下:
Traceback (most recent call last):
File "2.py", line 5, in <module>
    c=x.index(each)
ValueError: tuple.index(x): x not in tuple

请大佬指正


ps:这道题课后答案我看了,我只是想把自己一开始的思路写出来,另外刚开会员,没领到6月的鱼币,就不设悬赏了。。。见谅。。。










Twilight6 发表于 2020-6-23 00:21:50

有什么方法批量把列表里的字符串数字转换为int类型啊?

可以这样,但是这样只能把是数字的字符串筛选出来 存到 int_list 中

temp = ['125','13','45','4231','13']
int_list =

但这下面的这个代码可以达到你的第一个要求:

x = input('请输入一个列表:')
temp = x.split(',')
for i in range(len(temp)):
    if temp.isdigit():
      temp = int(temp)
    else:
      temp = temp
print(temp)

这样在改改就能达到你的目的,但是是无视参数里非数值类型的字符串嘿嘿:
x = input('请输入一个列表:')
temp = x.split(',')
sum = 0
for i in range(len(temp)):
    if temp.isdigit():
      sum += int(temp)
print(sum)

第二个问题你只要把逗号改成 + 号即可了:
x=

for each in x:
      if type(each)==str:
            c=x.index(each)
            x=x[:c]+x[(c+1):]
print(sum(x))

逗号是元组的标志哈~

永恒的蓝色梦想 发表于 2020-6-23 07:55:27

1.此时x是个字符串,无法用列表的命令进行操作。想着转换一下但是用list命令转换就全散了,如果我想直接输入一个列表或者元组,我该用什么命令替代input啊。x=eval(input('请输入一个列表'))

写了个这玩意,报错如下:
Traceback (most recent call last):
File "2.py", line 5, in <module>
    c=x.index(each)
ValueError: tuple.index(x): x not in tuple

请大佬指正x=

for each in x:
      if type(each)==str:
                c=x.index(each)
                x=x[:c]+x[(c+1):]

print(sum(x))
页: [1]
查看完整版本: 做第16课课后题的时候想写个删除列表里的字符串的代码遇到好几个问题