鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 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))
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

range函数原型:
  1. def range(start,end):
  2.         i = start
  3.         t = []
  4.         while i < end:
  5.                 t.append(i)
  6.                 i += 1
  7.         return t
复制代码

因为用的是<,所以它会少执行一次
所以要+1

设个最佳呗

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

因为用的是

没有 step 而且现在的 range 返回迭代器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 22:00:51 | 显示全部楼层
range(0,3)是从0到3-1就是2
range(last+1)就是range(0,last+1),是从0到last
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

正确代码:
  1. def edg(x):
  2.     english=0
  3.     number=0
  4.     block=0
  5.     others=0
  6.     last=len(x)
  7.     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']
  8.     str2=['0','1','2','3','4','5','6','7','8','9']
  9.     str3=[' ']
  10.     for each in range(last):
  11.         if x[each] in str1:
  12.             english+=1
  13.             continue
  14.         elif x[each] in str2:
  15.             number+=1
  16.             continue
  17.         elif x[each] in str3:
  18.             block+=1
  19.             continue
  20.         else :
  21.             others+=1
  22.             continue
  23.     return (english,number,block,others)
  24. x=input('请输入字符串')
  25. print(edg(x))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

额……迭代器哪里不好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

因为用的是

  1. def range_(start=0, stop, step=1):
  2.     l = [start]
  3.     while 1:
  4.         if each := start + step < stop and step != 0:
  5.             l += [each]
  6.             continue
  7.         break
  8.     return l.__iter__()
复制代码

这什么也不是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

还有,start 和 step 应分别初始化为 0 和 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是吧啊sir,不测试直接发?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

随手一写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 14:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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