退出while循环,该循环输出到包含用户输入的CSV文件,但不包括最后一个输入

ie3xauqp  于 2023-03-27  发布在  其他
关注(0)|答案(5)|浏览(111)

我试图通过检查用户输入是否等于特定的单词来使用exit a while循环。

def add():

    with open("pyquiztest1.csv", 'a+') as f:
        new_question = input('Enter your question. Type exit to exit: \n')
        while new_question != 'exit':
            new_question = input('Enter your question. Type exit to exit: \n')
            f.writelines(f'{new_question}\n')
            if new_question == 'exit':
                break

这段代码可以工作,但我不知道如何不包括字符串exit到CSV文件。
csv输出:

q,d,g
t,h,i
exit
yc0p9oo0

yc0p9oo01#

在写入文件之前中断循环。

  • 请求输入
  • 检验条件
  • 写入文件或中断循环
EXIT_COMMAND = "exit"
with open("pyquiztest1.csv", 'a+') as f:
    while True:
        new_question = input(f'Enter your question. Type {EXIT_COMMAND} to exit: \n')
        if new_question == EXIT_COMMAND:
            break
        f.writelines(f'{new_question}\n')

旁注:

  • 对于相同的值,使用“常量”/变量,否则您可以更改“exit”的一次出现,而忘记其他的
ulmd4ohb

ulmd4ohb2#

你只需要一个while循环,如下所示:

def add():
    with open("pyquiztest1.csv", 'a+') as f:
        while (question := input('Enter your question. Type exit to exit: ')) != 'exit':
            print(question, file=f)

注:

需要Python 3.8以上版本

x9ybnkn6

x9ybnkn63#

你可以在这里使用python3.8 assignment expression来保存大量的重复。在你的代码中,你有while来检查条件,然后你在循环体中再次检查它。这对错误检查和维护来说是不好的。

def add():

    with open("pyquiztest1.csv", 'a+') as f:
        
        while(new_question := input('Enter your question. Type exit to exit: \n') ) != "exit" :
            f.writelines(f'{new_question}\n')
41zrol4v

41zrol4v4#

为了不重复相同的用户input(在代码级),使用以下方法(在写入文件之前检查输入值):

with open("pyquiztest1.csv", 'a+') as f:
    while True:
        val = input('Enter your question. Type exit to exit: \n')
        if val == 'exit':
            break
        f.write(f'{val}\n')
vvppvyoh

vvppvyoh5#

使用csv库:

import csv

EXIT_COMMAND = "exit"

with open("pyquiztest1.csv", 'a+', newline='') as f:
    csv_writer = csv.writer(f)
    while True:
        new_question = input(f'Enter your question. Type {EXIT_COMMAND} to exit: \n')
        if new_question == EXIT_COMMAND:
            break
        csv_writer.writerow([new_question])

相关问题