鱼C论坛

 找回密码
 立即注册
查看: 1366|回复: 9

这个地方last为啥+1才是正确结果啊 不是从0开始算吗

[复制链接]
发表于 2020-6-25 18:24:58 | 显示全部楼层 |阅读模式

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

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

x
def edg(x):
    english=0
    number=0
    block=0
    others=0
    length=len(x)
    last=length-1
    str1=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    str2=['0','1','2','3','4','5','6','7','8','9']
    str3=[' ']
    for each in range(last+1):
        if x[each] in str1:
            english+=1
            continue
        elif x[each] in str2:
            number+=1
            continue
        elif x[each] in str3:
            block+=1
            continue
        else :
            others+=1
            continue
    return (english,number,block,others)
x=input('请输入字符串')
print(edg(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-25 18:58:31 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-25 18:59 编辑

range函数原型:
def range(start,end):
        i = start
        t = []
        while i < end:
                t.append(i)
                i += 1
        return t
因为用的是<,所以它会少执行一次
所以要+1

设个最佳呗

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小甲鱼的铁粉 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2020-6-25 20:08:29 | 显示全部楼层
xiaosi4081 发表于 2020-6-25 18:58
range函数原型:

因为用的是

没有 step 而且现在的 range 返回迭代器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 22:00:51 | 显示全部楼层
range(0,3)是从0到3-1就是2
range(last+1)就是range(0,last+1),是从0到last
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 22:43:18 | 显示全部楼层
这个地方last为啥+1才是正确结果啊 不是从0开始算吗


我认为代码这里 last=length-1 然后又 last+1 完全是多余的 直接 用 length 就好了

正确代码:
def edg(x):
    english=0
    number=0
    block=0
    others=0
    last=len(x)
    str1=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    str2=['0','1','2','3','4','5','6','7','8','9']
    str3=[' ']
    for each in range(last):
        if x[each] in str1:
            english+=1
            continue
        elif x[each] in str2:
            number+=1
            continue
        elif x[each] in str3:
            block+=1
            continue
        else :
            others+=1
            continue
    return (english,number,block,others)
x=input('请输入字符串')
print(edg(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 10:34:16 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-25 20:08
没有 step 而且现在的 range 返回迭代器

额……迭代器哪里不好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 10:39:55 From FishC Mobile | 显示全部楼层
本帖最后由 _2_ 于 2020-6-26 11:21 编辑
xiaosi4081 发表于 2020-6-25 18:58
range函数原型:

因为用的是

def range_(start=0, stop, step=1):
    l = [start]
    while 1:
        if each := start + step < stop and step != 0:
            l += [each]
            continue
        break
    return l.__iter__()
这什么也不是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 10:42:09 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-25 20:08
没有 step 而且现在的 range 返回迭代器

还有,start 和 step 应分别初始化为 0 和 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 10:51:30 | 显示全部楼层

不是吧啊sir,不测试直接发?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 11:21:00 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-26 10:51
不是吧啊sir,不测试直接发?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 05:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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