【问题标题】:How to loop through a column in csv using python如何使用python循环遍历csv中的列
【发布时间】:2020-11-08 22:00:38
【问题描述】:

我目前正在制作一份关于 csv 和使用 python 编程的问卷。我试图让我的代码循环通过我的电子表格中的第一列,并且只打印具有与用户在这种情况下选择的内容相对应的问题,1 代表地球或 2 代表动物......

以下是我到目前为止的代码,但是当我遍历这段代码时,如果数字不等于 1,它不会中断。我还尝试创建一个变量,询问用户输入哪个主题他们想挑选。但是当我运行程序时,无论用户输入 1 还是 2,只有最后一个问题会打印 5 次,只有 csv 文件底部的问题会打印 5 次。

这是我的代码!!

with open('questionnaire.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        key = row[0]
        subject = row[1]
        question = row[2]
        option1 = row[3]
        option2 = row[4]
        option3 = row[5]
        option4 = row[6]
        prompt = "Which option do you pick? "
        answer = row[7]
        
        user_prompt = (f"" + question + "\n" + option1 + "\n" + option2 + "\n" +
                       option3 + "\n" + option4 + "\n" + prompt)

        for key in row[0]:
            if key == '1':
                print(key)
            else:
                break

        questionnaire = input(user_prompt)

【问题讨论】:

  • 密钥的类型是什么?
  • 显示为字符串
  • 当你说循环没有中断时,你怎么知道?是不是因为你从一个不是 1 的数字开始,它仍然会打印一些东西?

标签: python loops csv


【解决方案1】:

您的第一个 for 循环很好,它正在遍历每一行。在每次迭代中,您都在制作key=row[0],这很好。但是然后你又做了一个没有意义的 for 循环 for key in row[0] row[0] 要么是 1 要么是 2 在这里做一个 for 循环是没有目标的。我认为您想要的是从用户输入开始,输入选项 1 或 2(在 for 循环之前),然后在 for 循环内,如果 key 等于您打印 user_prompt 的用户选择。清楚了吗?

[已编辑] 试试这个,然后创建另一个 if/else 语句来验证用户答案是否等于正确答案

selection = input("1 for earth 2 for animals")

with open('questionnaire.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        key = row[0]
        subject = row[1]
        question = row[2]
        option1 = row[3]
        option2 = row[4]
        option3 = row[5]
        option4 = row[6]
        prompt = "Which option do you pick? "
        answer = row[7]
        
        user_prompt = (f"" + question + "\n" + option1 + "\n" + option2 + "\n" +
                       option3 + "\n" + option4 + "\n" + prompt)

        if key == selection:
            user_answer = input(user_prompt)

【讨论】:

  • 我想我已经尝试过你在这里的建议,这是我以前的建议。它输出问题 5 次,这是我想要的,但它不会遍历每个问题,而是仅在我的数据集中打印最后一个问题 5 次。 with open('questionnaire.csv', 'r') as questionFile: questionFileReader = csv.reader(questionFile) hello = input("你想选择哪个主题?") for key in questionFileReader: if key[0] = = 你好:
  • 可能是因为您正在更改密钥。我用代码编辑了解决方案。看看它是否满足您的需求。
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 2021-03-04
  • 2019-12-13
  • 2020-06-25
  • 2018-02-07
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
相关资源
最近更新 更多