【问题标题】:Format list into correct string将列表格式化为正确的字符串
【发布时间】:2021-08-22 12:44:54
【问题描述】:

您好,我有一个问题要进行测验.. 我显示我的代码 >>> 我的课是:

class Question:
    def __init__(self, prompt, answer_prompt, answer):
        self.prompt = prompt
        self.answer_prompt = answer_prompt
        self.answer = answer

我的主要是:

from Question import Question

question_prompt = [
    "De quels couleur sont les bananes ?",
    "De quels couleur sont les pommes ?",
    "De quels couleur sont les fraises ?"
]

question1_answers_prompt = [
    "(a) Rouge\n",
    "(b) Jaune\n",
    "(c) Bleue\n\n",
]

question2_answers_prompt = [
    "(a) Rouge\n",
    "(b) Violette\n",
    "(c) Orange\n\n",
]

question3_answers_prompt = [
    "(a) Rouge\n",
    "(b) Verte\n",
    "(c) Jaune\n\n",
]
questions = [
    Question(question_prompt[0], question1_answers_prompt[:], 'b'),
    Question(question_prompt[1], question2_answers_prompt[:], 'a'),
    Question(question_prompt[2], question3_answers_prompt[:], 'a'),
]


def run_test(questions):
    score = 0
    miss = 0
    answered = []

    for question in questions:
        print(question.prompt)
        answer = input(question.answer_prompt)

        answered.append(answer)
        if answer == question.answer:
            score += 1
        
    print(f"Tu as {score} / {len(questions)}")
    print(answered)
    

run_test(questions)

我尝试了一些技术列表理解,但我可以正确格式化我的question_answers_prompt 列表 我有这样的事情:

\>\>\> ['(a) Rouge\n', '(b) Jaune\n', '(c) Bleue\n\n']

而我需要的是:

\>\>\> (a) Rouge
    (b) Jaune
    (c) Bleue

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    您不能在answers 定义中添加格式

    question1_answers_prompt = ["(a) Rouge", "(b) Jaune", "(c) Bleue", ]
    question2_answers_prompt = ["(a) Rouge", "(b) Violette", "(c) Orange", ]
    question3_answers_prompt = ["(a) Rouge", "(b) Verte", "(c) Jaune", ]
    

    但只有在使用的时候

    • 你想要在每一行之前有一个制表符,在每一行之后有一个换行符,所以格式为f"\t{a}\n"

    • 空字符串时加入以连接每个答案行

    for question in questions:
        print(question.prompt)
        answer = input("".join(f"\t{a}\n" for a in question.answer_prompt))
    

    给予

    De quels couleur sont les bananes ?
            (a) Rouge
            (b) Jaune
            (c) Bleue
    b
    

    更多风格

    添加符号以查看要回答的行

    for question in questions:
        print(question.prompt)
        print("\n".join(f"\t{a}" for a in question.answer_prompt))
        answer = input(">> ")
    
    De quels couleur sont les bananes ?
            (a) Rouge
            (b) Jaune
            (c) Bleue
    >> a
    

    【讨论】:

    • ohhh 好的,是的,这个方法是最好的,(因为我需要为 100 个问题做这个,随机选择--',所以如果我能写得更少,谢谢)
    【解决方案2】:

    在这种情况下,您可能想要加入列表的元素:

    for question in questions:
        print(question.prompt)
        answer = input(''.join(question.answer_prompt))
        ....
    

    输出:

    De quels couleur sont les bananes ?
    (a) Rouge
    (b) Jaune
    (c) Bleue
    
    ...
    

    【讨论】:

    • 你根本没有回答,input(''.join(question.answer_prompt))input(''.join(a for a in question.answer_prompt))一样
    【解决方案3】:

    我只改变你的这行代码:answer = input(question.answer_prompt),如下所示:

    class Question:
        def __init__(self, prompt, answer_prompt, answer):
            self.prompt = prompt
            self.answer_prompt = answer_prompt
            self.answer = answer
    
    question_prompt = [
        "De quels couleur sont les bananes ?",
        "De quels couleur sont les pommes ?",
        "De quels couleur sont les fraises ?"
    ]
    
    question1_answers_prompt = [
        "(a) Rouge\n",
        "(b) Jaune\n",
        "(c) Bleue\n\n",
    ]
    
    question2_answers_prompt = [
        "(a) Rouge\n",
        "(b) Violette\n",
        "(c) Orange\n\n",
    ]
    
    question3_answers_prompt = [
        "(a) Rouge\n",
        "(b) Verte\n",
        "(c) Jaune\n\n",
    ]
    questions = [
        Question(question_prompt[0], question1_answers_prompt[:], 'b'),
        Question(question_prompt[1], question2_answers_prompt[:], 'a'),
        Question(question_prompt[2], question3_answers_prompt[:], 'a'),
    ]
    
    
    def run_test(questions):
        score = 0
        miss = 0
        answered = []
    
        for question in questions:
            print(question.prompt)
            answer = input(''.join(a for a in question.answer_prompt))
    
            answered.append(answer)
            if answer == question.answer:
                score += 1
            
        print(f"Tu as {score} / {len(questions)}")
        print(answered)
        
    
    run_test(questions)
    

    【讨论】:

    • 如果您根本没有更改,您可能不需要粘贴所有给定的代码
    • 谢谢,你的方法也有效? 我把这两种方法都保存在我的工作表中,因为列表理解是 op。
    • 是的,对不起,我没有看到你的徽章,但是两种方法都是平等的,我投票给我看到的第一个^^'
    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多