【问题标题】:Error in a loop which prints string from last index to first index将字符串从最后一个索引打印到第一个索引的循环中的错误
【发布时间】:2021-05-26 15:17:12
【问题描述】:

我编写了这个循环来打印任何输入字符串,从它的最后一个索引到每个单独的行上的第一个索引。但是当我运行它时,从技术上讲,它只有在字符串全部为小写时才能正常工作。它不适用于大写字符串。在这两种情况下,输入字符串都是大写或小写,以下输出显示带有我不知道的回溯:

输出:

C:\Users\CM-Ajk\PycharmProjects\Pract\venv\Scripts\python.exe C:/Users/CM-Ajk/PycharmProjects/Pract/main.py
Enter: emadd
d
d
a
m
e
Traceback (most recent call last):
  File "C:\Users\CM-Ajk\PycharmProjects\Pract\main.py", line 166, in <module>
    print(name[i-1])
IndexError: string index out of range

Process finished with exit code 1

代码:

i = 0
name = input("Enter: ")
while True:
    print(name[i-1])
    i = i-1

【问题讨论】:

  • 您的while True 循环何时停止...?
  • 另外:print(*name[::-1], sep='\n') 获得相同的结果(无错误)。
  • 我把它写成 while len(name) > i : 一开始,但它没有任何区别,所以我把它改成了 true。
  • len(name) 总是比i 多一。 'emadd'len5,但最后一个有效索引是 4...您还从 0 向下递减 i,所以,是的,len 始终是 &gt; i

标签: python python-3.x loops while-loop


【解决方案1】:
for i in name[::-1]: print(i)

试试上面的方法,[::-1] 返回反转的字符串。

【讨论】:

    【解决方案2】:

    我认为最好为名称长度定义一个条件 并在 i 上开始 -1

    name = input("Enter: ")
    i = len(name) - 1
    while i > 0 :
        print(name[i])
        i = i - 1
    

    【讨论】:

      【解决方案3】:

      你可以重构你的代码如下:

      name = 'emadd'
      j = len(name)-1
      
      while j>= 0:
          print(name[j])
          j-= 1
      

      或者像这样选择使用 for 循环处理 int:

      for i in range(len(enter)-1,-1,-1):
          print(enter[i])
      

      【讨论】:

      • 好的,明白了!谢谢。
      猜你喜欢
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2011-08-13
      • 2013-05-30
      • 1970-01-01
      相关资源
      最近更新 更多