鱼C论坛

 找回密码
 立即注册
查看: 2193|回复: 16

[已解决]帮忙看一下python16课中的一个问题

[复制链接]
发表于 2017-3-12 21:45:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. temp=input('请输入内容')
  2. c=[]
  3. a=0
  4. for each in temp:
  5.     if (type(each) == int) or (type(each) == float):
  6.         c.append(each)
  7.         a+=each
  8. print(a)
  9. print(c)
  10. print(sum(c))
复制代码


为什么会出现这样的运行结果啊大家帮忙看一下

最佳答案
2017-3-13 09:43:32
4楼说的确实那个条件会过滤掉输入的字符串。但是输入的是字符串应该不会影响。主要是在判断条件上出错。你输入的字符串,就算转化成list后还是以单个字符串存。所以那个条件根本判断不出来,那就换个思路,强制转换,如果不是数字,就要报错,那么自然就想到try语句。下面是我的代码。能得正确结果。楼主有鱼币给我哈
  1. temp=input('请输入内容')
  2. c=[]
  3. a=0
  4. for each in temp:
  5.     try:
  6.         each = int(each)
  7.         c.append(each)
  8.         a+=each
  9.     except ValueError:
  10.         continue
  11. print(a)
  12. print(c)
  13. print(sum(c))
复制代码
  1. 请输入内容(1,2,3)
  2. 6
  3. [1, 2, 3]
  4. 6
复制代码
1489326252(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-12 22:33:49 | 显示全部楼层
你没有输入吧……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-12 22:48:56 | 显示全部楼层
是不是“,”用了中文的?虽然 好像可能性不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-12 22:57:46 | 显示全部楼层
>>> temp = input('请输入内容:')
请输入内容:1, 2, 3
>>> temp
'1, 2, 3'
>>> type(temp)
<class 'str'>
由于使用input函数,所以temp属于字符串。被if (type(each) == int) or (type(each) == float):语句过滤掉。若按下列写法预计可以正常输出并过滤掉字符串'abc',推测,没有做测试,请自行尝试

>>> temp = [1, 2, 1.1, 'abc']
>>> temp
[1, 2, 1.1, 'abc']
>>> type(temp)
<class 'list'>
>>>
另外受问题启发,打算查询一下有没有一个函数可以将字符串自动解释为整形或浮点型,看到一下讨论,有点意思。
http://stackoverflow.com/questio ... ing-to-float-or-int

评分

参与人数 1荣誉 +5 收起 理由
小宇666 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-3-13 08:47:59 | 显示全部楼层
输入的都是字符串,条件语句不管用,都不符合条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:16:30 | 显示全部楼层
donkkong 发表于 2017-3-12 22:57
>>> temp = input('请输入内容:')
请输入内容:1, 2, 3
>>> temp

大神,那为什么
>>> temp = (1,2,3)
>>> for each in temp:
        type(each)
<class 'int'>
<class 'int'>
<class 'int'>
这样是int,楼主题中好像也用的each呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:32:20 | 显示全部楼层
input()函数的返回值是字符串。
你用字符串的内置方法判断这个字符串是否全是字符或者全是数字吧,这样你下面的if语句才有用处。
for each in temp:
    if each.isdigit():
   c.append()
   a += each

可能isdigit方法我用错了,你用help(str.isdigit)看看具体用法。或者用help(str)看看字符串的完整帮助文档。
祝你好运
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:34:10 | 显示全部楼层
爱上Q的球 发表于 2017-3-13 09:16
大神,那为什么
>>> temp = (1,2,3)
>>> for each in temp:

在控制台输入元组时,元组的元素类型就是你所输入内容的类型。加引号的是字符串,带小数点的是float类型,全是数字的是整形。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:35:30 | 显示全部楼层
def sum(x):
    result = 0
    for each in x:
        if (type(each) == int) or (type(each) == float):
            result += each
        else:
            continue
    return result
print(sum([1, 2.1, 2.3, 'a', '1', True]))
这是答案。可以看到最后一行是使用一个列表的形式来求和。 而你使用的input函数的类型为一个string,关于这个,4楼已经解释得很清楚了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:43:32 | 显示全部楼层    本楼为最佳答案   
4楼说的确实那个条件会过滤掉输入的字符串。但是输入的是字符串应该不会影响。主要是在判断条件上出错。你输入的字符串,就算转化成list后还是以单个字符串存。所以那个条件根本判断不出来,那就换个思路,强制转换,如果不是数字,就要报错,那么自然就想到try语句。下面是我的代码。能得正确结果。楼主有鱼币给我哈
  1. temp=input('请输入内容')
  2. c=[]
  3. a=0
  4. for each in temp:
  5.     try:
  6.         each = int(each)
  7.         c.append(each)
  8.         a+=each
  9.     except ValueError:
  10.         continue
  11. print(a)
  12. print(c)
  13. print(sum(c))
复制代码
  1. 请输入内容(1,2,3)
  2. 6
  3. [1, 2, 3]
  4. 6
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-3-13 10:09:53 | 显示全部楼层
完全跳过了if 的判断语句了:

input 接收的,都是 str类型。

你的判断句temp 这个变量类型,都是str,根本不会出现完全等于 int 或者 float的情况。

那么输出结果...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-3-13 12:06:57 | 显示全部楼层
爱上Q的球 发表于 2017-3-13 09:16
大神,那为什么
>>> temp = (1,2,3)
>>> for each in temp:

>>> temp1 = input('请输入内容:')
请输入内容:1,2,3
>>> temp2 = (1, 2, 3)
>>> type(temp1)
<class 'str'>
>>> type(temp2)
<class 'tuple'>
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 14:19:52 | 显示全部楼层
你输入的内容是一个元组,那么元组的类型不属于if的条件,那么就会不执行if下的语句,打印出来的a值和c值自然就是你初始化的a值和c值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 15:13:50 | 显示全部楼层
input输入的是个字符串,肯定不会有产出啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 19:34:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-13 19:55:45 | 显示全部楼层
自然水 发表于 2017-3-13 10:09
完全跳过了if 的判断语句了:

input 接收的,都是 str类型。

xiexie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-13 19:56:13 | 显示全部楼层
jackche0214 发表于 2017-3-13 09:43
4楼说的确实那个条件会过滤掉输入的字符串。但是输入的是字符串应该不会影响。主要是在判断条件上出错。你 ...

谢谢啦,明白额,新手多提问题!!谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 01:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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