Python 列表错误,列表索引超出范围。

4

我不明白我做错了什么!

x=7
List=[]
for i in range(0,x):
    verify=False
    while verify==False:
        Values=input("Enter Code")
        verify=Values.isdigit()

    ValueList=int(Values)
    List.append(ValueList)
    value1=int(List[0])
    value2=int(List[1])
    value3=int(List[2])
    value4=int(List[3])
    value5=int(List[4])
    value6=int(List[5])
    value7=int(List[6])
    value8p1=(value1*1)+(value2*3)+(value3*1)+(value4*3)+(value5*1)+(value6*3)+(value7*1)
    value9=math.ceil(value8p1//10)
    print(value9)

我的老师也不知道,我感觉这是一些愚蠢的东西...

(关于it技术的翻译部分需要提供更具体的内容)

List.append(ValueList) 后面的代码应该放在 for 循环之外。 - Kenly
它在哪里崩溃?你得到什么输出?有任何异常吗? - ygesher
这看起来不对:value9=math.ceil(value8p1//10)。为什么要使用双斜杠? - ygesher
// 是Python整数除法运算符(它将向零四舍五入)。它的输出是一个整数,所以 ceil 不起作用。 - Martin Bonner supports Monica
3个回答

2

这只是一个缩进问题。

import math


x=7
List=[]
for i in range(0,x):
    verify=False
    while verify==False:
        Values=input("Enter Code")
        verify=Values.isdigit()

    ValueList=int(Values)
    List.append(ValueList)
value1=int(List[0])
value2=int(List[1])
value3=int(List[2])
value4=int(List[3])
value5=int(List[4])
value6=int(List[5])
value7=int(List[6])
value8p1=(value1*1)+(value2*3)+(value3*1)+(value4*3)+(value5*1)+(value6*3)+(value7*1)
value9=math.ceil(value8p1//10)
print(value9)

@CODE_KILLER 请检查。 - Kenly

1
如果我输入1234,那么Values包含字符串"1234"。然后您将字符串转换为整数。
ValueList=int(Values) # converts string "1234" to integer 1234

并将整数添加到空列表中

List.append(ValueList)# List not looks like this List=[1234]

所以你的列表只包含一个元素。
因此,List[1]超出范围。

顺便说一句:不要将值命名为内置名称,如list
请参阅官方naming conventions

编辑

当你更正缩进后,你的代码仍然存在风险。
如果你将x更改为小于7的值,你的代码将崩溃。

仍然是危险的代码

x=7 
List=[]
for i in range(0,x):
    verify=False
    while verify==False:
        Values=input("Enter Code")
        verify=Values.isdigit()

    ValueList=int(Values)
    List.append(ValueList)

value1=int(List[0])
value2=int(List[1])
value3=int(List[2])
value4=int(List[3])
value5=int(List[4])
value6=int(List[5])
value7=int(List[6])
value8p1=(value1*1)+(value2*3)+(value3*1)+(value4*3)+(value5*1)+(value6*3)+(value7*1)
value9=math.ceil(value8p1//10)
    print(value9)

所以你应该在循环中进行计算,以避免索引错误:
更新后的代码
x = 4
values = []
for i in range(0, x):
    verify = False
    while verify == False:
        value = input("Enter Code")
        verify = value.isdigit()

    values.append(int(value))

result = 0
for index, value in enumerate(values):
    if index % 2 == 0:
        result += value * 3
    else:
        result += value

finalResult = math.ceil(result // 10)
print(finalResult)

1
这是可运行的代码:

import math

x=7
List=[]
for i in range(0,x):
    verify=False
    while verify==False:
        Values=raw_input("Enter Code")
        verify=Values.isdigit()
        print verify

    ValueList=int(Values)
    List.append(ValueList)
value1=int(List[0])
value2=int(List[1])
value3=int(List[2])
value4=int(List[3])
value5=int(List[4])
value6=int(List[5])
value7=int(List[6])
value8=(value1*1)+(value2*3)+(value3*1)+(value4*3)+(value5*1)+(value6*3)+(value7*1)
value9=math.ceil(value8//10)
print(value9)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接