【问题标题】:Why do I get duplicate output when using a for loop over a list?为什么在列表上使用 for 循环时会得到重复的输出?
【发布时间】:2021-01-03 03:11:34
【问题描述】:

您好,我在列表中打印数据时出现循环问题。

def inputScore(scor) :
    for i in range(len(scor)) :
        scor[i] = int(input("Enter Score Number : "))

def Display(scr) :
    for i in scr:
        if i >= 86 and i <= 100 :
            x = "A"
        elif i >= 70 and i < 86 :
            x = "B"
        elif i >= 60 and i < 70 :
            x = "C"
        elif i >= 50 and i < 60 :
            x = "D"
        elif i >= 0 and i < 50 :
            x = "E"
        else :
            print("Invalid Score")
        for i in range(0,3) : # If I remove this code "for..", it will error "IndexError: list index out of range"
            print("Score Number",scr[i],"Letter Grades", x)

def main () :
    scor = [int]*3
    inputScore(scor)
    Display(scor)
main()

例子:

# Input :
85
60
40

# Output that I want :
Score Number 85 Letter Grades A
Score Number 60 Letter Grades C
Score Number 40 Letter Grades E

# Output that I got :
Score Number 85 Letter Grades A
Score Number 60 Letter Grades A
Score Number 40 Letter Grades A

Score Number 85 Letter Grades C
Score Number 60 Letter Grades C
Score Number 40 Letter Grades C

Score Number 85 Letter Grades E
Score Number 60 Letter Grades E
Score Number 40 Letter Grades E

Letter Grades 有 3 次循环(A = 3 次,C = 3 次和 E = 3 次),我试图给 for i in range(0,3) 以停止循环但它不起作用,Letter Grades 总是打印 9 次3 A, 3 C, 3 E。如何解决并像上例那样输出?

【问题讨论】:

  • 是时候尝试自己调试这个程序来学习逻辑了——pythontutor.com。

标签: python-3.x list loops


【解决方案1】:

内部的for 循环是不必要的。外部for 循环已经遍历分数。在每次迭代中,i 是一个 score,而不是 index -- 要获得一个索引,您可以使用 range。因此,根本不需要索引scr 列表——您将打印i 本身而不是scr[i]

此外,使用当前代码,85 的等级将是 B 而不是 A。也许您需要调整AB 成绩的界限。

另一个问题是,对于无效的分数,它仍然会尝试最终的print。如果第一个分数出现无效分数,这将失败(因为不会定义x)。如果后续分数出现无效分数,print 将显示您不想要的先前分数的分数。您可以通过在每次迭代开始时将 x 设置为空字符串并在最终打印成绩之前检查它是否具有非空值来解决此问题。

以下代码解决了讨论的问题:

def inputScore(scor):
    for i in range(len(scor)):
        scor[i] = int(input("Enter Score Number: "))

def display(scr):
    for i in scr:
        x = ""
        if i >= 85 and i <= 100:
            x = "A"
        elif i >= 70 and i < 85:
            x = "B"
        elif i >= 60 and i < 70:
            x = "C"
        elif i >= 50 and i < 60:
            x = "D"
        elif i >= 0 and i < 50:
            x = "E"
        else:
            print("Invalid Score")
        if x:
            print("Score Number:", i, "Letter Grade:", x)

def main():
    scor = [int] * 3
    inputScore(scor)
    display(scor)

main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2018-03-20
    相关资源
    最近更新 更多