0

所以,我有这个代码片段:

import sys

while True:
  print("Make sure the number of digits are exactly 12 : ")
  x = input()
  if str(x) == 12:
      break

  code = []

  for i in range(12):
      code[i] = int(x[i])

如果未输入 12 位数字,我希望程序重复这些行,“确保 .... 12 :”。之后,我将它们复制到一个数组中,以访问其中的每个单独元素,以进行非常基本的算术计算。我是否朝着正确的方向前进?我对 python 完全陌生,我该如何解决这个问题?上面的代码显示以下错误。

Traceback (most recent call last):
  File "C:\Users\Arjo\Desktop\hw2a.py", line 14, in <module>
    code[i] = int(x[i])
IndexError: list assignment index out of range
4

3 回答 3

3

您不是用 来创建输入数组x,而是每次都覆盖它。你的比较也是错误的;你不想看到字符串x 12,但它的长度是 12:

x = []
while True:
  print("Make sure the number of digits are exactly 12 : ")
  x.append(input())
  if len(x) == 12:
      break
于 2013-02-08T03:41:25.817 回答
1

IndexError: list assignment index out of range发生是因为您有一个空列表并尝试更新第一个元素。由于列表为空,因此没有第一个元素,因此引发了异常。

解决此问题的一种方法是使用code.append(x[i]),但在这种情况下有一种更简单的方法。默认list构造函数将完全按照您的意愿行事

我想你可能想要这样的东西

while True:
  print("Make sure the number of digits are exactly 12 : ")
  x = input()
  if len(x) != 12:   # if the length is not 12
      continue       # ask again

  code = list(x)

这将继续要求更多输入,直到输入正好 12 个字符

于 2013-02-08T03:56:23.893 回答
0

不,这看起来行不通...尝试更改此:

if str(x) == 12:
      break

进入这个:

if len(str(x)) == 12: 
    break

希望有帮助...

于 2013-02-08T03:42:06.090 回答