第五季 发表于 2020-6-25 18:24:58

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

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 in str1:
            english+=1
            continue
      elif x in str2:
            number+=1
            continue
      elif x in str3:
            block+=1
            continue
      else :
            others+=1
            continue
    return (english,number,block,others)
x=input('请输入字符串')
print(edg(x))

xiaosi4081 发表于 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

设个最佳呗{:10_254:}

永恒的蓝色梦想 发表于 2020-6-25 20:08:29

xiaosi4081 发表于 2020-6-25 18:58
range函数原型:

因为用的是

没有 step {:10_277:}而且现在的 range 返回迭代器{:10_249:}

xiaofeiyu 发表于 2020-6-25 22:00:51

range(0,3)是从0到3-1就是2
range(last+1)就是range(0,last+1),是从0到last

Twilight6 发表于 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 in str1:
            english+=1
            continue
      elif x in str2:
            number+=1
            continue
      elif x in str3:
            block+=1
            continue
      else :
            others+=1
            continue
    return (english,number,block,others)
x=input('请输入字符串')
print(edg(x))

_2_ 发表于 2020-6-26 10:34:16

永恒的蓝色梦想 发表于 2020-6-25 20:08
没有 step 而且现在的 range 返回迭代器

额……迭代器哪里不好了

_2_ 发表于 2020-6-26 10:39:55

本帖最后由 _2_ 于 2020-6-26 11:21 编辑

xiaosi4081 发表于 2020-6-25 18:58
range函数原型:

因为用的是

def range_(start=0, stop, step=1):
    l =
    while 1:
      if each := start + step < stop and step != 0:
            l +=
            continue
      break
    return l.__iter__()
这什么也不是

_2_ 发表于 2020-6-26 10:42:09

永恒的蓝色梦想 发表于 2020-6-25 20:08
没有 step 而且现在的 range 返回迭代器

还有,start 和 step 应分别初始化为 0 和 1

永恒的蓝色梦想 发表于 2020-6-26 10:51:30

_2_ 发表于 2020-6-26 10:39


不是吧啊sir,不测试直接发?

_2_ 发表于 2020-6-26 11:21:00

永恒的蓝色梦想 发表于 2020-6-26 10:51
不是吧啊sir,不测试直接发?

随手一写
页: [1]
查看完整版本: 这个地方last为啥+1才是正确结果啊 不是从0开始算吗