目錄
- 1. IQ智商判斷
- 2. 2行代碼進行IQ智商判斷
- 3. IQ智商測試
- 4. IQ智商測試與判斷(順序版)
- 5. IQ智商測試與判斷(亂序版)
- 6. IQ智商測試與判斷(分析版)
- 7. 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所示。
示例代碼如下:
level_list = ["白癡", "白癡", "白癡", "白癡", "白癡", "智障", "智弱", "臨界",
"凡人", "聰慧", "聰慧", "人才", "精英", "天才", "天才", "天才", "天才", "天才", "天才", "天才"]
print(level_list[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所示。
示例代碼如下:
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))