davidmou 发表于 2023-8-12 23:43:55

hhhhhhhhhhhhelp


【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决
def myRev(attribute):
    a = len(attribute) - 1
    while 1:
      try:
            yield attribute
            a -= 1
      except:
            return

for i in myRev("FishC"):
    print(i, end='')

为什么打印结果是ChsiFChsiF,而不是ChsiF

isdkz 发表于 2023-8-12 23:55:18

你这个生成器直到有异常才结束迭代,而在 python 中负数是可以做索引的

所以你的输出过程的索引是

43210-1-2-3-4-5
Chs   iF   C   h    s   i    f

这就是输出两遍的原因,你要输出 ChsiF 的话就限制索引的值,而不是通过异常结束生成器

def myRev(attribute):
    a = len(attribute) - 1
    while not a < 0:
      yield attribute
      a -= 1

for i in myRev("FishC"):
    print(i, end='')

ba21 发表于 2023-8-12 23:55:25

前面不是答复了,关建在你的while处。

ba21 发表于 2023-8-12 23:56:05

2楼说的对

学习编程中的Ben 发表于 2023-8-12 23:57:12

本帖最后由 学习编程中的Ben 于 2023-8-12 23:58 编辑

因为当a为负数时,他还会继续取值,
举个例子:
a = "FishC"
print(a[-1])
输出:
C

所以,你的代码应该加个判断:
def myRev(attribute):
    a = len(attribute) - 1
    while a >= 0:
      try:
            yield attribute
            a -= 1
      except:
            return

for i in myRev("FishC"):
    print(i, end='')


输出:
ChsiF

给个最佳答案呗!!!求你了!!!{:10_254:}

歌者文明清理员 发表于 2023-8-12 23:59:31

def myRev(attribute):
    a = len(attribute) - 1
    while 1:
      try:
            yield (attribute, a)
            a -= 1
      except:
            return

for i in myRev("FishC"):
    print(i)


这不就知道了吗,负数也是有索引的

sfqxx 发表于 2023-8-13 00:09:58

isdkz 发表于 2023-8-12 23:55
你这个生成器直到有异常才结束迭代,而在 python 中负数是可以做索引的

所以你的输出过程的索引是


一眼人工{:10_275:}

isdkz 发表于 2023-8-13 00:14:29

sfqxx 发表于 2023-8-13 00:09
一眼人工

为了最佳没办法{:10_266:},个个都好晚呀,要是最佳被Ben抢走了我得{:10_247:}

歌者文明清理员 发表于 2023-8-13 00:57:56

isdkz 发表于 2023-8-13 00:14
为了最佳没办法,个个都好晚呀,要是最佳被Ben抢走了我得

没办法,这样下去论坛估计会遭殃……
页: [1]
查看完整版本: hhhhhhhhhhhhelp