Python每日一练(13)-IQ智商判断及测试

1. IQ智商判断

智商,即智力商数(Intelligence Quotient),是衡量个人智力高低的标准。智商主要反映人的认知能力、思维能力、语言能力、观察能力、计算能力、律动能力等。也就是说,它主要表现人的理性的能力。智商可以通过一系列的标准测试测量人在其年龄段的智力发展水平,如表1所示,为9级智商评测表格。请编写一个程序,根据提供的9级智商评测表格和用户输入的智商分数,输出对应的智商等级和类别,运行效果如图1、图2所示。
在这里插入图片描述
在这里插入图片描述
示例代码如下:

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所示。
在这里插入图片描述
在这里插入图片描述
示例代码如下:

msg = ["白痴", "白痴", "白痴", "白痴", "白痴", "智障", "智弱", "临界", "凡人", "聪慧", "人才", "精英",
       "天才", "天才", "天才", "天才", "天才", "天才", "天才"]
print(msg[int(int(input("请输入你的IQ分数(在0-190范围输入): ").strip()) / 10)])

3. IQ智商测试

请编写一个程序,根据本例提供的30道智商测试题来测试智商,每题回答正确加6分,回答错误不记分,完成本次测试,程序输出智商分数。运行效果如下图1、图2所示。因为30道题目控制台输出太长,所以就截取了开头和结尾,省略了中间的答题。
在这里插入图片描述
这篇博文所用到的的文件资源网盘路径如下:

链接: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级智商评测表输出答题者的智商等级和所属类别。运行结果如图所示。
在这里插入图片描述
在这里插入图片描述
示例代码如下:

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级智商评测表输出答题者的智商等级和所属类别。
在这里插入图片描述
运行效果如下面的gif图:
在这里插入图片描述

示例代码如下:

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并分析测试者成绩在所有测试成绩中的排名与位置,并分析各级智商的分布情况,运行效果如图所示。
在这里插入图片描述
在这里插入图片描述
示例代码如下:

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所示。
图1
在这里插入图片描述
示例代码如下:

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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章