天天看點

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

目錄

  • 1. IQ智商判斷
  • 2. 2行代碼進行IQ智商判斷
  • 3. IQ智商測試
  • 4. IQ智商測試與判斷(順序版)
  • 5. IQ智商測試與判斷(亂序版)
  • 6. IQ智商測試與判斷(分析版)
  • 7. IQ智商測試與判斷(限時版)

1. IQ智商判斷

智商

,即

智力商數(Intelligence Quotient)

,是衡量個人智力高低的标準。智商主要反映人的認知能力、思維能力、語言能力、觀察能力、計算能力、律動能力等。也就是說,它主要表現人的理性的能力。智商可以通過一系列的标準測試測量人在其年齡段的智力發展水準,如表1所示,為9級智商評測表格。請編寫一個程式,根據提供的9級智商評測表格和使用者輸入的智商分數,輸出對應的智商等級和類别,運作效果如圖1、圖2所示。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)
Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

iq_score = int(input("請輸入你的IQ分數: ").strip())  # 錄入資料
if iq_score >= 140:  # 判斷
    print(f"您的IQ分數為: {iq_score},智商9級: 天才")
elif 120 <= iq_score < 140:
    print(f"您的IQ分數為: {iq_score},智商8級: 精英")
elif 110 <= iq_score < 120:
    print(f"您的IQ分數為: {iq_score},智商7級: 人才")
elif 90 <= iq_score < 110:
    print(f"您的IQ分數為: {iq_score},智商6級: 聰慧")
elif 80 <= iq_score < 90:
    print(f"您的IQ分數為: {iq_score},智商5級: 凡人")
elif 70 <= iq_score < 80:
    print(f"您的IQ分數為: {iq_score},智商4級: 臨界")
elif 60 <= iq_score < 70:
    print(f"您的IQ分數為: {iq_score},智商3級: 智弱")
elif 50 <= iq_score < 60:
    print(f"您的IQ分數為: {iq_score},智商2級: 智障")
else:
    print(f"您的IQ分數為: {iq_score},智商1級: 白癡")
           

2. 2行代碼進行IQ智商判斷

隻用兩行代碼,根據使用者輸入的IQ智商分數與表1的9級智商評測表進行比對,并輸出IQ智商類别。運作效果如圖1、圖2所示。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)
Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

level_list = ["白癡", "白癡", "白癡", "白癡", "白癡", "智障", "智弱", "臨界",
              "凡人", "聰慧", "聰慧", "人才", "精英", "天才", "天才", "天才", "天才", "天才", "天才", "天才"]
print(level_list[int(int(input("請輸入你的IQ分數(在0-190範圍輸入): ").strip()) / 10)])
           

3. IQ智商測試

請編寫一個程式,根據本例提供的30道智商測試題來測試智商,每題回答正确加6分,回答錯誤不記分,完成本次測試,程式輸出智商分數。運作效果如下圖1、圖2所示。因為30道題目控制台輸出太長,是以就截取了開頭和結尾,省略了中間的答題。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

這篇博文所用到的的檔案資源網盤路徑如下:

連結:https://pan.baidu.com/s/1e6oWo-O61epKnp8wuQ4Ugg 
提取碼:wrod 
           

示例代碼如下:

import os


def read_file(path, file_name):
    """
    讀取檔案函數
    :param path: 路徑
    :param file_name: 檔案名稱
    :return: 檔案内容
    """
    # 這裡的/ 也可以換成\\
    with open(path + "/" + file_name, "r", encoding="utf8") as file:
        content = file.read()  # 因為檔案内容比較少 是以直接使用read方法一次性全部讀取
    return content


if __name__ == '__main__':
    print("=======================IQ智力測試=======================")
    print("-" * 55)
    len_que = len(os.listdir("./que"))
    score = 0  # 用來統計得分
    # 30道題 每次循環讀取一道題 但是如果增加到了40道題
    # 是不是for循環又要改了 是以最好是動态擷取檔案夾中的檔案個數
    for i in range(1, len_que + 1):
        # 讀取檔案 因為讀取檔案會在後續頻繁使用到 是以封裝為函數
        print(f"\n第 {i} 題: \n" + read_file("./que", "que" + str(i) + ".txt"))
        # 使用者輸入答案
        user_ans = input("請輸入正确答案前面的數字編号: ").strip()
        # 讀取正确答案
        right_ans = read_file("./ans", "ans" + str(i) + ".txt").strip()
        if user_ans == right_ans:  # 判斷使用者輸入答案與正确一緻
            score += 6  # 答案一緻加6分
	print(f"你的IQ測試成績為: {score}")
           

4. IQ智商測試與判斷(順序版)

完善上面的

IQ智商測試程式

,根據IQ智商測試分數和表1的9級智商評測表輸出答題者的智商等級和所屬類别。運作結果如圖所示。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)
Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

import os


def read_file(path, file_name):
    """
    讀取檔案函數
    :param path: 路徑
    :param file_name: 檔案名稱
    :return: 檔案内容
    """
    # 這裡的/ 也可以換成\\
    with open(path + "/" + file_name, "r", encoding="utf8") as file:
        content = file.read()  # 因為檔案内容比較少 是以直接使用read方法一次性全部讀取
    return content


if __name__ == '__main__':
    print("=======================IQ智力測試=======================")
    print("-" * 55)
    len_que = len(os.listdir("./que"))
    score = 0  # 用來統計得分
    msg = ["智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商2級: 智障",
           "智商3級: 智弱", "智商4級: 臨界", "智商5級: 凡人", "智商6級: 聰慧", "智商7級: 人才", "智商8級: 精英",
           "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才",
           "智商9級: 天才", "智商9級: 天才"]
    # 30道題 每次循環讀取一道題 但是如果增加到了40道題
    # 是不是for循環又要改了 是以最好是動态擷取檔案夾中的檔案個數
    for i in range(1, len_que + 1):
        # 讀取檔案 因為讀取檔案會在後續頻繁使用到 是以封裝為函數
        print(f"\n第 {i} 題: \n" + read_file("./que", "que" + str(i) + ".txt"))
        # 使用者輸入答案
        user_ans = input("請輸入正确答案前面的數字編号: ").strip()
        # 讀取正确答案
        right_ans = read_file("./ans", "ans" + str(i) + ".txt").strip()
        if user_ans == right_ans:  # 判斷使用者輸入答案與正确一緻
            score += 6  # 答案一緻加6分
    print(f"你的IQ測試成績為: {score} {msg[int(score / 10)]}")
           

5. IQ智商測試與判斷(亂序版)

上面的

IQ智商測試程式

是按照題目的正常順序出題的,修改程式,

随機抽取題目

進行測試,然後根據IQ智商測試分數和表1的9級智商評測表輸出答題者的智商等級和所屬類别。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

運作效果如下面的

gif

圖:

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

import os
import random


def read_file(path, file_name):
    """
    讀取檔案函數
    :param path: 路徑
    :param file_name: 檔案名稱
    :return: 檔案内容
    """
    # 這裡的/ 也可以換成\\
    with open(path + "/" + file_name, "r", encoding="utf8") as file:
        content = file.read()  # 因為檔案内容比較少 是以直接使用read方法一次性全部讀取
    return content


if __name__ == '__main__':
    print("=======================IQ智力測試=======================")
    print("-" * 55)
    len_que = len(os.listdir("./que"))
    score = 0  # 用來統計得分
    msg = ["智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商2級: 智障",
           "智商3級: 智弱", "智商4級: 臨界", "智商5級: 凡人", "智商6級: 聰慧", "智商7級: 人才", "智商8級: 精英",
           "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才",
           "智商9級: 天才", "智商9級: 天才"]
    num_list = list(range(1, len_que + 1))
    i = 1
    while len(num_list) > 0:
        num = random.choice(num_list)
        num_list.remove(num)
        print(f"\n第 {i} 題: \n" + read_file("./que", "que" + str(num) + ".txt"))
        # 使用者輸入答案
        user_ans = input("請輸入正确答案前面的數字編号: ").strip()
        # 讀取正确答案
        right_ans = read_file("./ans", "ans" + str(num) + ".txt").strip()
        if user_ans == right_ans:  # 判斷使用者輸入答案與正确一緻
            score += 6  # 答案一緻加6分
        i += 1
    print(f"你的IQ測試成績為: {score} {msg[int(score / 10)]}")
           

6. IQ智商測試與判斷(分析版)

修改上面的程式,在對使用者進行智商測試時并将測試成績記錄下來,記錄檔案為源檔案同路徑的

iq.txt

檔案。記錄測試成績和智商級别(如天才、精英等),結合

表1

并分析測試者成績在所有測試成績中的排名與位置,并分析各級智商的分布情況,運作效果如圖所示。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)
Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

import os
import random


def read_file(path, file_name):
    """
    讀取檔案函數
    :param path: 路徑
    :param file_name: 檔案名稱
    :return: 檔案内容
    """
    # 這裡的/ 也可以換成\\
    with open(path + "/" + file_name, "r", encoding="utf8") as file:
        content = file.read()  # 因為檔案内容比較少 是以直接使用read方法一次性全部讀取
    return content


if __name__ == '__main__':
    print("=======================IQ智力測試=======================")
    print("-" * 55)
    len_que = len(os.listdir("./que"))
    score = 0  # 用來統計得分
    msg = ["智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商2級: 智障",
           "智商3級: 智弱", "智商4級: 臨界", "智商5級: 凡人", "智商6級: 聰慧", "智商7級: 人才", "智商8級: 精英",
           "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才",
           "智商9級: 天才", "智商9級: 天才"]
    msg2 = ["白癡", "智障", "智弱", "臨界", "凡人", "聰慧", "人才", "精英", "天才"]
    num_list = list(range(1, len_que + 1))
    i = 1
    while len(num_list) > 0:
        num = random.choice(num_list)
        num_list.remove(num)
        print(f"\n第 {i} 題: \n" + read_file("./que", "que" + str(num) + ".txt"))
        # 使用者輸入答案
        user_ans = input("請輸入正确答案前面的數字編号: ").strip()
        # 讀取正确答案
        right_ans = read_file("./ans", "ans" + str(num) + ".txt").strip()
        if user_ans == right_ans:  # 判斷使用者輸入答案與正确一緻
            score += 6  # 答案一緻加6分
        i += 1
    print(f"你的IQ測試成績為: {score} {msg[int(score / 10)]}")
    # 将成績和等級寫入檔案
    with open("iq.txt", "a", encoding="utf8") as file:
        file.write(str(score) + "," + msg[int(score / 10)].split(":")[1].strip() + "\n")
    # 讀取檔案中的測試成績及等級
    score_list = []  # 用來存儲所有的成績
    level_list = []  # 用來存儲所有的等級
    if os.path.exists("iq.txt"):
        with open("iq.txt", "r", encoding="utf8") as file:
            while True:
                line_content = file.readline().strip()
                if line_content == "":
                    break
                else:
                    score_list.append(int(line_content.split(",")[0].strip()))
                    level_list.append(line_content.split(",")[1].strip())
    # 對成績進行排序
    score_list.sort(reverse=True)
    print(f"目前您在所有測試的成績中排名第{score_list.index(score) + 1}名,"
          f"超過了{len(score_list) - (score_list.index(score) + 1)}名選手")
    print("智商測試分析圖: ")
    for item in msg2:
        print(item, int(level_list.count(item)) * chr(9632), level_list.count(item))
           

7. IQ智商測試與判斷(限時版)

一般的考試都有時間限制,如聯考數學、國文的考試時間為2個小時。為IQ智商測試添加

限時測試功能

,要求測試者必須在

30分鐘

内答題完成測試,每答完一道題輸出相應剩餘時間,如圖1所示。如果答題逾時将結束測試,輸出目前的測試成績、IQ級别及測試者在所有測試者中的成績排名和IQ各級智商的分析圖表,程式運作效果如圖2所示。

Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)
Python每日一練(13)-IQ智商判斷及測試1. IQ智商判斷2. 2行代碼進行IQ智商判斷3. IQ智商測試4. IQ智商測試與判斷(順序版)5. IQ智商測試與判斷(亂序版)6. IQ智商測試與判斷(分析版)7. IQ智商測試與判斷(限時版)

示例代碼如下:

import os
import random
import datetime


def read_file(path, file_name):
    """
    讀取檔案函數
    :param path: 路徑
    :param file_name: 檔案名稱
    :return: 檔案内容
    """
    # 這裡的/ 也可以換成\\
    with open(path + "/" + file_name, "r", encoding="utf8") as file:
        content = file.read()  # 因為檔案内容比較少 是以直接使用read方法一次性全部讀取
    return content


if __name__ == '__main__':
    print("=======================IQ智力測試(限時版)=======================")
    print("-" * 55)
    print("說明: 測試時間: 30分鐘,測試題數: 30")
    now = datetime.datetime.now()  # 擷取目前時間
    delay_time = datetime.timedelta(minutes=30)
    stop_time = now + delay_time
    print("測試結束時間為: ", stop_time.strftime("%Y-%m-%d %H:%M:%S"))
    len_que = len(os.listdir("./que"))
    score = 0  # 用來統計得分
    msg = ["智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商1級: 白癡", "智商2級: 智障",
           "智商3級: 智弱", "智商4級: 臨界", "智商5級: 凡人", "智商6級: 聰慧", "智商7級: 人才", "智商8級: 精英",
           "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才", "智商9級: 天才",
           "智商9級: 天才", "智商9級: 天才"]
    msg2 = ["白癡", "智障", "智弱", "臨界", "凡人", "聰慧", "人才", "精英", "天才"]
    num_list = list(range(1, len_que + 1))
    i = 1
    while len(num_list) > 0:
        num = random.choice(num_list)
        num_list.remove(num)
        print(f"\n第 {i} 題: \n" + read_file("./que", "que" + str(num) + ".txt"))
        # 使用者輸入答案
        user_ans = input("請輸入正确答案前面的數字編号: ").strip()
        # 讀取正确答案
        right_ans = read_file("./ans", "ans" + str(num) + ".txt").strip()
        if user_ans == right_ans:  # 判斷使用者輸入答案與正确一緻
            score += 6  # 答案一緻加6分
        now = datetime.datetime.now()
        left = int((stop_time - now).seconds / 60)
        if left <= 0:
            print("答題逾時,将結束測試!")
            break
        else:
            print(f"剩餘答題時間:{left}分鐘")
        i += 1
    print(f"你的IQ測試成績為: {score} {msg[int(score / 10)]}")
    # 将成績和等級寫入檔案
    with open("iq.txt", "a", encoding="utf8") as file:
        file.write(str(score) + "," + msg[int(score / 10)].split(":")[1].strip() + "\n")
    # 讀取檔案中的測試成績及等級
    score_list = []  # 用來存儲所有的成績
    level_list = []  # 用來存儲所有的等級
    if os.path.exists("iq.txt"):
        with open("iq.txt", "r", encoding="utf8") as file:
            while True:
                line_content = file.readline().strip()
                if line_content == "":
                    break
                else:
                    score_list.append(int(line_content.split(",")[0].strip()))
                    level_list.append(line_content.split(",")[1].strip())
    # 對成績進行排序
    score_list.sort(reverse=True)
    print(f"目前您在所有測試的成績中排名第{score_list.index(score) + 1}名,"
          f"超過了{len(score_list) - (score_list.index(score) + 1)}名選手")
    print("智商測試分析圖: ")
    for item in msg2:
        print(item, int(level_list.count(item)) * chr(9632), level_list.count(item))