【问题标题】:Python for loop: index out of range errorPython for循环:索引超出范围错误
【发布时间】:2015-04-03 00:24:35
【问题描述】:

我正在尝试创建一个循环,该循环将获取用户输入的内容并在大写和小写之间交替打印。例如:用户输入“helloworld”,它打印回“HeLlOwOrLd”。这是我目前所拥有的(相信我,我知道这不是最佳的,这正是我可以开始工作的):

s = input("enter characters: ")
word = ''
count = 0


for i in s:
        up = s[::2]
        up2 = up.upper()
        up3 = up2[0 + count]
        low = s[1::2]
        low2 = low.lower()
        low3 = low2[0 + count]
        word += up3 + low3
        count += 1

print(word)

当我在调试器中跟踪它时,word 出现了正确的值,然后它再次运行循环,从而导致索引超出范围错误。想法?

【问题讨论】:

  • 编程中最常见的两个问题是缓存验证、命名事物和非一错误。

标签: python loops for-loop indexing range


【解决方案1】:

您的循环次数过多。您在循环中将 s 分成两半,但对 s 中的每个字符循环一次。

s = input("enter characters: ")
word = ''


for count in range(len(s[::2])):
        up = s[::2]
        up2 = up.upper()
        up3 = up2[0 + count]
        low = s[1::2]
        low2 = low.lower()
        if(len(low2)>count):
            low3 = low2[0 + count]
        else:
            low3=''
        word += up3 + low3
        count += 1

print(word)

干杯!

【讨论】:

  • 为什么要在每次迭代时转换整个字符串,为什么要0 + count 以及为什么要增加计数?
  • 该问题要求有关错误的帮助。尝试是尽可能少地进行更改,以帮助了解导致错误的原因。
【解决方案2】:

count 最终将等于s 的长度。但是,您使用count 作为比s 短的字符串的索引,例如up3

尝试以下方法:

>>> result = ''
>>> word = 'hello'
>>> for i in range(len(word)):
...     result += (word[i].lower() if i%2 else word[i].upper())
...
>>> result
'HeLlO'

还有:

>>> word = 'HellOWorLD'
>>> ''.join(word[i].lower() if i%2 else word[i].upper() for i in range(len(word)))
'HeLlOwOrLd'

【讨论】:

    【解决方案3】:

    您可以使用stringitertools.cycle 中的大小写转换函数来改变将哪个应用于每个字符。将所有这些都包含在一个 join 语句中,你会得到:

    ''.join(case(c) for case,c in 
        zip(itertools.cycle((string.upper,string.lower)), 'helloworld'))
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 2017-04-27
      • 2013-03-09
      • 2020-07-23
      • 1970-01-01
      • 2020-09-07
      • 2022-06-13
      • 2019-04-17
      相关资源
      最近更新 更多