python——答题系统

# 1. 定义一个问题列表
# Q_list = []
# 每一个问题包括:问题question/四个(也可能不是四个)选项choice/正确答案answer
# 先写两个题目作为测试数据
 
Q_list = [{’question’:"第一个问题的正确答案是( )",
’choices’:["aa1","bb1","cc1","dd1"],
"answer":0},
{’question’:"第二个问题的正确答案是( )",
’choices’:["aa2","bb2","cc2","dd2"],
"answer":2},
]
 
 
# 2. 定义main()函数
def main():
# 先尝试输出这个问题列表
#print(Q_list)
 
#设计两个变量,一个记录总题目数量
#一个记录答对题目数量
#最后计算出答对百分比输出
#共几题,答对几题,正确率为几%
 
 
#遍历列表时使用enumerate()函数,
#可以同时输出列表项的序号和内容
 
# 3. 遍历问题列表,调用ask_Q(i,q)实现出题:
#  ask_Q(i,q)
#  @param i 是题目的序号
#  @param q 是题目内容
#  输出问题
#  print("第{0}题:{1}".format(i+1,q[’question’])
#  遍历几个选项,逐一输出
 
# 4. to_letter(n):
#  将数字0123转换为’A’’B’’C’’D’
 
# 5. 提示用户输入答案,调用to_answer函数进行判断
 
# 6. to_answer(user_input):
#  @param user_input 是用户输入的答案字母
#  先将用户输入的答案转换为大写字母
 
#  if 若只输入一个字母,且在A~Z之间,则:
#  digit = 将其ASCII值与’A’字母的ASCII值相减(ord函数),
#  得用户答案的数字
#  return digit,True
#  else:
#  return None,False
 
# 7. 调用to_answer函数,得返回值
# user_answer,ok = to_answer(user_input)
 
# 8. while not ok:
#  提示用户再次输入,
#  直到 ok的值为True 
#  返回用户回答与正确答案比较的布尔值
#  return user_answer == q[’answer’]
 
# 9.判断正误
# 先定义个变量 correct_count = 0
# if 回答正确:
#  correct_count += 1
 
# 10.计算正确率公式: correct_count/q_len * 100
 
# 11. 输出格式为:
#  共几题,答对几题,正确率为几%
 
 
#测试代码
if __name__ == "__main__":
main()

'''
# 1. 定义一个问题列表
# Q_list = []
# 每一个问题包括:问题question/四个(也可能不是四个)选项choice/正确答案answer
# 先写两个题目作为测试数据

Q_list = [{’question’:"第一个问题的正确答案是( )",
’choices’:["aa1","bb1","cc1","dd1"],
"answer":0},
{’question’:"第二个问题的正确答案是( )",
’choices’:["aa2","bb2","cc2","dd2"],
"answer":2},
]

'''
Q_list=[{'question':"第一个问题的正确答案是( )",
         'choices':["aa1","bb1","cc1","dd1"],
         'answer':0},
        {'question':"第二个问题的正确答案是( )",
         'choices':["aa2","bb2","cc2","dd2"],
         'answer':2},]


'''
# 2. 定义main()函数
def main():
# 先尝试输出这个问题列表
#print(Q_list)
 
#设计两个变量,一个记录总题目数量
#一个记录答对题目数量
#最后计算出答对百分比输出
#共几题,答对几题,正确率为几%
 
 
#遍历列表时使用enumerate()函数,
#可以同时输出列表项的序号和内容
'''
totalnum=len(Q_list)   #总题目数量
correctnum=0            #答对题目数量

def main():
    global correctnum   #   为了解决这个错误,UnboundLocalError: local variable 'correctnum' referenced before assignment,使用global让解释器清楚变量是全局变量还是局部变量
    for i in range(totalnum):   #   循环遍历问题列表
        ask_Q(i,Q_list[i]['question'])
        for j in range(len(Q_list[i]['choices'])):
            print("{0}.{1}".format(to_letter(j),Q_list[i]['choices'][j]))
        correctnum=correctnum+answer(Q_list[i]['answer'])
    print("共{0}题,答对{1}题,正确率为{2}%".format(totalnum,correctnum,(correctnum/totalnum) * 100))

'''
用于用户输入答案和判断对错的函数
'''
def answer(correct_answer):
    correct_count = 0
    user_input = input('请输入您的答案:')
    user_answer, ok = to_answer(user_input)
    while not ok:
        user_input=input('您的输入不正确,请输入A、B、C、D这四个正确的答案:')
        user_answer, ok = to_answer(user_input)
    if user_answer==correct_answer:
        correct_count+=1
    return correct_count


'''
# 3. 遍历问题列表,调用ask_Q(i,q)实现出题:
#  ask_Q(i,q)
#  @param i 是题目的序号
#  @param q 是题目内容
#  输出问题
#  print("第{0}题:{1}".format(i+1,q[’question’])
#  遍历几个选项,逐一输出

'''
def ask_Q(i,q):
    print("第{0}题:{1}".format(i+1,q))

'''
# 4. to_letter(n):
#  将数字0123转换为’A’’B’’C’’D’
'''
def to_letter(n):
    if n==0:
        return 'A'
    elif n==1:
        return 'B'
    elif n==2:
        return 'C'
    else:
        return 'D'

'''
# 6. to_answer(user_input):
#  @param user_input 是用户输入的答案字母
#  先将用户输入的答案转换为大写字母
 
#  if 若只输入一个字母,且在A~Z之间,则:
#  digit = 将其ASCII值与’A’字母的ASCII值相减(ord函数),
#  得用户答案的数字
#  return digit,True
#  else:
#  return None,False

'''
def to_answer(user_input):
    user_input=user_input.upper()   #  先将用户输入的答案转换为大写字母
    if len(user_input)==1 and ord(user_input)>=65 and ord(user_input)<=90:
        return ord(user_input)-ord('A'),True
    else:
        return None,False

if __name__=="__main__":
    main()
  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值