鱼C论坛

 找回密码
 立即注册
查看: 1086|回复: 19

[已解决]请教:0基础入门python16讲

[复制链接]
发表于 2018-1-19 15:44:23 | 显示全部楼层 |阅读模式

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

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

x
代码:
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"))

为什么要输入列表才能正常运行,输入字符串打印结果为0,然而像下面代码,比较大小可以输入字符串跟列表


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"))

最佳答案
2018-1-19 19:03:11
首先来说下print(sum_My("1,2.1,2.3,'a','1',True"))
这个里面x="1,2.1,2.3,'a','1',True",这是一个字符串包换22个元素,那么循环会进行22次,第一次each='1',第二次each=','......第22次each = 'e',但是循环在if判断时每次都为假,固均不执行result += each代码,所以最后result为最初赋予的值result = 0
验证,代码修改如下
>>> def sum_My(x):
        result = 1     //result初始值为1
        time = 0      //记录循环次数的变量,初始为0
        for each in x:
                time += 1
                if(type(each)== int)or(type(each)==float):
                        result += each
                else:
                        continue
        return result,time
>>> sum_My("1,2.1,2.3,'a','1',True")
(1, 22)
>>>
可以看到结果为result = 1,为最初赋予的值,time=22次,为循环的次数.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-19 15:49:07 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 sky 于 2018-1-19 15:57 编辑

函数名不要和内置函数相同
列表是各种的元素的容器
字符串是更小的字符串的组成

遍历列表的时候 元素是每一个组成列表的单位
遍历字符串的时候 元素是长度为1的字符串(python中没有字符的概念)

字符串就像字符的列表 但是不可修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 15:49:31 | 显示全部楼层
比较大小的代码发错了
def min(x):
    least = x[0]

    for each in x:
        if each < least:
            least = each

    return least

print(min('123456789'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 15:50:08 | 显示全部楼层
你把函数名改一下,不要和系统内置的函数sum重名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 15:52:54 | 显示全部楼层
改过的:
def sum_my(x):
    result = 0
   
    for each in x:
        if (type(each) == int) or (type(each) == float):
            result += each
        else:
            continue

    return result

print(sum_my("1, 2.1, 2.3, 'a', '1', True")) 输出为0
print(sum_my([1, 2.1, 2.3, 'a', '1', True]))输出正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 15:56:40 | 显示全部楼层
def min(x):
    least = x[0]

    for each in x:
        if each < least:
            least = each

    return least

print(min('123456789'))输出正确
print(min([1, 2.1, 2.3, 'a', '1', True]))输出正确

为什么像这个函数就可以接受列表跟字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 15:59:33 | 显示全部楼层
BngThea 发表于 2018-1-19 15:50
你把函数名改一下,不要和系统内置的函数sum重名


改过的:
def sum_my(x):
    result = 0
   
    for each in x:
        if (type(each) == int) or (type(each) == float):
            result += each
        else:
            continue

    return result

print(sum_my("1, 2.1, 2.3, 'a', '1', True")) 输出为0
print(sum_my([1, 2.1, 2.3, 'a', '1', True]))输出正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 16:00:05 | 显示全部楼层
BngThea 发表于 2018-1-19 15:50
你把函数名改一下,不要和系统内置的函数sum重名


def min(x):
    least = x[0]

    for each in x:
        if each < least:
            least = each

    return least

print(min('123456789'))输出正确
print(min([1, 2.1, 2.3, 'a', '1', True]))输出正确

为什么像这个函数就可以接受列表跟字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 16:06:32 | 显示全部楼层
sky 发表于 2018-1-19 15:49
函数名不要和内置函数相同
列表是各种的元素的容器
字符串是更小的字符串的组成

意思是不是 字符串里的数字不是整型,是小字符串,当比较大小的时候是比较他们的ASK值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 16:10:20 | 显示全部楼层
lolykong 发表于 2018-1-19 15:59
改过的:
def sum_my(x):
    result = 0

你用字符串形式的时候
for each in x: 这里每个each都是字符,当然if判断就失败,结果为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 16:14:26 | 显示全部楼层
BngThea 发表于 2018-1-19 16:10
你用字符串形式的时候
for each in x: 这里每个each都是字符,当然if判断就失败,结果为0

def min(x):
    least = x[0]

    for each in x:
        if each < least:
            least = each

    return least

print(min('123456789'))输出正确
print(min([1,2,3,4,5,6,7,8]))输出正确

为什么像这个函数就可以接受列表跟字符串
是比较他们的ASK值么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 16:20:21 | 显示全部楼层
lolykong 发表于 2018-1-19 16:14
def min(x):
    least = x[0]

因为这里将结果least初始化为x一样的类型
所以如果传入字符串,那么也是可以进行比较操作的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 16:30:00 | 显示全部楼层
BngThea 发表于 2018-1-19 16:20
因为这里将结果least初始化为x一样的类型
所以如果传入字符串,那么也是可以进行比较操作的

但是也是先比较完再赋值呀

是不是同类型的就可以比较,通过ASCⅡ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 16:48:11 | 显示全部楼层
lolykong 发表于 2018-1-19 16:30
但是也是先比较完再赋值呀

是不是同类型的就可以比较,通过ASCⅡ

是先初始化为 x[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 17:03:58 | 显示全部楼层
BngThea 发表于 2018-1-19 16:48
是先初始化为 x[0]

是以整型的类型还是以字符串的类型赋值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 17:13:27 | 显示全部楼层
lolykong 发表于 2018-1-19 17:03
是以整型的类型还是以字符串的类型赋值?

你传递进来是什么,就是什么
比如x = '123'
那么x[0]就是'1'
如果x = [1,2.3,4]
那么x[0]就是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 17:18:50 | 显示全部楼层
BngThea 发表于 2018-1-19 17:13
你传递进来是什么,就是什么
比如x = '123'
那么x[0]就是'1'

那他是怎么比较的啊 通过int比较还是str型的ASC比较
我好菜啊 绕不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 17:25:36 | 显示全部楼层
lolykong 发表于 2018-1-19 17:18
那他是怎么比较的啊 通过int比较还是str型的ASC比较
我好菜啊 绕不出来了

int就通过int
如果是字符就通过ascii码大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 17:43:36 | 显示全部楼层
BngThea 发表于 2018-1-19 17:25
int就通过int
如果是字符就通过ascii码大小

好的,谢谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 19:03:11 | 显示全部楼层    本楼为最佳答案   
首先来说下print(sum_My("1,2.1,2.3,'a','1',True"))
这个里面x="1,2.1,2.3,'a','1',True",这是一个字符串包换22个元素,那么循环会进行22次,第一次each='1',第二次each=','......第22次each = 'e',但是循环在if判断时每次都为假,固均不执行result += each代码,所以最后result为最初赋予的值result = 0
验证,代码修改如下
>>> def sum_My(x):
        result = 1     //result初始值为1
        time = 0      //记录循环次数的变量,初始为0
        for each in x:
                time += 1
                if(type(each)== int)or(type(each)==float):
                        result += each
                else:
                        continue
        return result,time
>>> sum_My("1,2.1,2.3,'a','1',True")
(1, 22)
>>>
可以看到结果为result = 1,为最初赋予的值,time=22次,为循环的次数.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 07:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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