python四則運算生成器

toner1ko發表於2024-04-14

合作伙伴:2252717

在程式設計任務中,清晰地理解並規劃設計思路是至關重要的。對於這個特定的四則運算題目生成器,目標是建立一個程式,能夠隨機生成包含兩個運算子的數學題目,這些題目涉及100以內的數字,並確保所有生成的題目的答案都在0到100之間。以下是我在設計和實現這個程式時遵循的詳細步驟:

初步需求分析

首先,我明確了程式需要滿足的基本要求:

隨機性:題目中的數字和運算子都應該是隨機選擇的。
限制條件:所有題目的答案必須在0到100之間。
使用者互動:允許使用者輸入答案,並給出是否正確的反饋。

技術選型

選擇合適的技術和方法是任何開發工作的基礎。在這個專案中,我選擇使用Python語言,主要基於以下幾點:

Python的random庫可以方便地生成隨機數。
Python的operator庫能夠提供簡潔的方式來執行基本的數學運算。
Python簡單的語法和豐富的庫支援使得快速原型開發成為可能。

程式架構設計

  1. 隨機生成數字和運算子
    我使用random.randint(1, 100)來生成兩個隨機數字,並使用random.choice從運算子列表['+', '-', '*', '/']中選擇運算子。這保證了題目的多樣性和隨機性。

  2. 保證計算結果的有效性
    這是設計中最具挑戰性的部分。對於加、減和乘法,控制結果的範圍相對簡單。然而,為了確保除法的結果是整數並且在0到100之間,我採用了特別的策略:

整數除法:使用Python的整數除法floordiv,這保證了除法的結果總是整數。
選擇合適的除數:為了確保除法能夠正確進行,被除數必須是除數的倍數。我編寫了程式碼來選擇能夠整除當前隨機選擇的被除數的除數。
3. 使用者互動設計
程式應允許使用者輸入他們的答案,並即時給出反饋。這一部分透過簡單的輸入/輸出操作實現,增加了程式的互動性和實用性。

程式碼展示

import random
import operator


def generate_valid_question():
    # 運算子和對應的操作函式
    ops = {
        '+': operator.add,
        '-': operator.sub,
        '*': operator.mul,
        '/': operator.floordiv,  # 使用整數除法確保結果為整數
    }

    # 嘗試生成符合條件的題目
    attempts = 0
    while attempts < 1000:  # 防止無限迴圈
        # 生成兩個隨機數
        num1 = random.randint(1, 100)
        num2 = random.randint(1, 100)
        # 隨機選擇兩個運算子
        op1 = random.choice(list(ops.keys()))
        op2 = random.choice(list(ops.keys()))

        # 如果第一個運算子是除法,調整num2為num1的因數
        if op1 == '/':
            factors = [i for i in range(1, num1 + 1) if num1 % i == 0]
            num2 = random.choice(factors)

        result1 = ops[op1](num1, num2)

        # 生成第三個數,並計算最終結果
        num3 = random.randint(1, 100)
        if op2 == '/' and num3 == 0:
            continue

        # 如果第二個運算子是除法,調整num3為result1的因數
        if op2 == '/':
            if result1 == 0:
                continue
            factors = [i for i in range(1, abs(result1) + 1) if result1 % i == 0]
            if not factors:  # 確保因數列表不為空
                continue
            num3 = random.choice(factors)

        final_result = ops[op2](result1, num3)

        # 確保結果在0到100之間
        if 0 <= final_result <= 100:
            # 返回格式化的問題和結果
            return f"{num1} {op1} {num2} {op2} {num3} = ?", final_result
        attempts += 1

    return "Failed to generate a valid question within 1000 attempts", None


def ask_question():
    num_questions = int(input("您希望生成多少道題目? "))
    for _ in range(num_questions):
        question, correct_answer = generate_valid_question()
        print(question)
        user_answer = input("請輸入您的答案: ")
        if user_answer.isdigit() and int(user_answer) == correct_answer:
            print("答案正確!")
        else:
            print("答案錯誤。正確答案是:", correct_answer)
            print("")

# 測試生成函式並詢問使用者答案
ask_question()

執行結果

結論

透過這個詳細的設計思路,我能夠逐步實現一個既符合需求又使用者友好的四則運算題目生成器。整個過程不僅增強了我的程式設計技能,還加深了我對演算法和使用者互動設計的理解。

相關文章