鱼C论坛

 找回密码
 立即注册
查看: 2923|回复: 5

[已解决]解决一个小题目

[复制链接]
发表于 2022-8-30 09:31:31 | 显示全部楼层 |阅读模式
50鱼币
随机产生两个[1,10]内的整数和“+-*/”符号中的一个
输出表达式让用户输入其计算的答案
对结果进行判断,并输出判断的结果

10道题做完后为用户统计并显示答题的结果。

提示:关于随机数
import random
random.randint(1, 9)
random.random( )  0-1之间的数,不含1

案例格式如下:

第 1 题:7*4=?28
你答对了!
第 2 题:9-5=?4
你答对了!
第 3 题:

10/9=?1.3
结果貌似不太对!

......

第 10题:

10+9=?19

你答对了!

答题结果汇总:共10题,答对了9道,正确率:90%
最佳答案
2022-8-30 09:31:32
  1. import random

  2. questionSize = 10
  3. symbolStr = "+-*/"
  4. count = 0
  5. for i in range(1,questionSize+1):
  6.     num1 = random.randint(1,10)
  7.     num2 = random.randint(1,10)
  8.     symbol = random.choice(symbolStr)
  9.     exec("result=float(%d%s%d)" %(num1,symbol,num2))

  10.     inputResult = float(input("第%d题:%d%s%d=?" %(i,num1,symbol,num2)))
  11.     if inputResult == result:
  12.         print("你答对了!")
  13.         count += 1
  14.     else:
  15.         print("结果貌似不太对!")

  16. print("答题结果汇总:共%d题,答对了%d道,正确率:%d%%" %(questionSize,count,count/questionSize*100))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 09:31:32 | 显示全部楼层    本楼为最佳答案   
  1. import random

  2. questionSize = 10
  3. symbolStr = "+-*/"
  4. count = 0
  5. for i in range(1,questionSize+1):
  6.     num1 = random.randint(1,10)
  7.     num2 = random.randint(1,10)
  8.     symbol = random.choice(symbolStr)
  9.     exec("result=float(%d%s%d)" %(num1,symbol,num2))

  10.     inputResult = float(input("第%d题:%d%s%d=?" %(i,num1,symbol,num2)))
  11.     if inputResult == result:
  12.         print("你答对了!")
  13.         count += 1
  14.     else:
  15.         print("结果貌似不太对!")

  16. print("答题结果汇总:共%d题,答对了%d道,正确率:%d%%" %(questionSize,count,count/questionSize*100))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 10:13:22 | 显示全部楼层
本帖最后由 dolly_yos2 于 2022-8-30 10:16 编辑

远不如楼上可扩展或易读,但是一行
  1. import random;print("答题结果汇总:共 10 题,答对了 {} 道,正确率: {}%".format(*([[i, i * 10] for i in [sum([(print("你答对了!"),1)[1] if abs(float(input(f"第 {cal[0]} 题:{cal[1]}{cal[2]}{cal[3]}=? ")) - eval(f"{cal[1]}{cal[2]}{cal[3]}")) < 1e-2 else (print("结果貌似不太对!"),0)[1] for cal in [(i+1,random.randint(1,10),'+' if random.randint(1,4) == 1 else '-' if random.randint(1,3) == 1 else '*' if random.randint(1,2) == 1 else '/', random.randint(1, 10)) for i in range(10)]])]][0])))
复制代码

Python 真不熟,为了一行而一行的写法,如果有路过的大佬有更好的方法恳请指点。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 10:29:19 | 显示全部楼层
路过打酱油~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 11:14:14 | 显示全部楼层
水平有限,写的应该是简单易懂的,不理解的可以看注释的print
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2022/08/30

  3. '''
  4. 随机产生两个[1,10]内的整数和“+-*/”符号中的一个
  5. 输出表达式让用户输入其计算的答案
  6. 对结果进行判断,并输出判断的结果
  7. 10道题做完后为用户统计并显示答题的结果。
  8. 提示:关于随机数
  9. import random
  10. random.randint(1, 9)
  11. random.random( )  0-1之间的数,不含1
  12. 案例格式如下:
  13. 第 1 题:7*4=?28
  14. 你答对了!
  15. 第 2 题:9-5=?4
  16. 你答对了!
  17. 第 3 题:
  18. 10/9=?1.3
  19. 结果貌似不太对!
  20. ......
  21. 第 10题:
  22. 10+9=?19
  23. 你答对了!
  24. 答题结果汇总:共10题,答对了9道,正确率:90%
  25. '''
  26. import random
  27. def main():
  28.     count_right=0
  29.     count_error=0
  30.     for i in range(10):
  31.         # print('进入10次循环')
  32.         ########################################################
  33.         # print('获取两个随机整数数和一个符号')
  34.         num1 = random.randint(1, 9)
  35.         num2 = random.randint(1, 9)
  36.         list_1 = ['+',
  37.                   '-',
  38.                   '*',
  39.                   '/'
  40.                   ]
  41.         fuhao = random.choice(list_1)
  42.         ########################################################
  43.         # print('进行运算处理')
  44.         if fuhao =='+':
  45.             # print('进行+处理')
  46.             jieguo=num1+num2
  47.             shuru=input(f'第{i+1}题:\n{num1}+{num2}=')
  48.             if shuru !='':
  49.                 if int(shuru) ==jieguo:
  50.                     count_right=count_right+1
  51.                     print('你答对了!')

  52.                 else:
  53.                     count_error = count_error+1
  54.                     print('结果貌似不太对!')
  55.             else:
  56.                 count_error = count_error + 1
  57.                 print('结果貌似不太对!')
  58.         ######################################
  59.         elif fuhao =='-':
  60.             # print('进行-处理')
  61.             jieguo = num1 - num2
  62.             shuru = input(f'第{i+1}题:\n{num1}-{num2}=')
  63.             if shuru !='':
  64.                 if int(shuru) == jieguo:
  65.                     count_right = count_right + 1
  66.                     print('你答对了!')

  67.                 else:
  68.                     count_error = count_error + 1
  69.                     print('结果貌似不太对!')
  70.             else:
  71.                 count_error = count_error + 1
  72.                 print('结果貌似不太对!')
  73.         ######################################
  74.         elif fuhao == '*':
  75.             # print('进行*处理')
  76.             jieguo = num1 * num2
  77.             shuru = input(f'第{i+1}题:\n{num1}*{num2}=')
  78.             if shuru !='':
  79.                 if int(shuru) ==jieguo:
  80.                     count_right = count_right + 1
  81.                     print('你答对了!')

  82.                 else:
  83.                     count_error = count_error + 1
  84.                     print('结果貌似不太对!')
  85.             else:
  86.                 count_error = count_error + 1
  87.                 print('结果貌似不太对!')
  88.         ######################################
  89.         elif fuhao == '/':
  90.             # print('进行/处理,保留两位小数')
  91.             jieguo = round(num1/num2,2)
  92.             shuru = input(f'第{i+1}题:\n{num1}/{num2}=')
  93.             if shuru !='':
  94.                 if float(shuru) == jieguo:
  95.                     count_right = count_right + 1
  96.                     print('你答对了!')

  97.                 else:
  98.                     count_error = count_error + 1
  99.                     print('结果貌似不太对!')
  100.             else:
  101.                 count_error = count_error + 1
  102.                 print('结果貌似不太对!')


  103.         ########################################################
  104.     # print(f'正确次数为:{count_right}')
  105.     # print(f'错误次数为:{count_error}')
  106.     print(f'答题结果汇总:共10题,答对了{count_right}道,正确率:{count_right/10:.2%}')


  107. if __name__ == '__main__':
  108.       main()
复制代码

评分

参与人数 2荣誉 +5 鱼币 +5 贡献 +3 收起 理由
cjjJasonchen + 1 厉害捏
wy521@ + 4 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 13:03:38 | 显示全部楼层
做了一个简单的,应该可以符合要求,目前暂时没有bug
加法减法不会出现负数
除法为整数除法,答案为:“1” 或 “1余2” 这样的

  1. import time
  2. import random

  3. countT = 0 #答对题的数量
  4. count = 0 #答了多少题
  5. symbolstr = ["+","-","×","÷"]#显示的符号
  6. questionsize = 10#生成多少道题

  7. print("计时开始!")
  8. timestart = time.time()#开始计时


  9. while questionsize > 0:

  10.     a = random.randint(1,9)#a数字的范围,生成数字a
  11.     b = random.randint(1,9)#b数字的范围,生成数字b
  12.     symbollist = [a + b, a - b, a * b, [a // b,a % b]]  # 计算符号


  13.     choice = random.randint(0,3)#随机选择一种符号

  14.     #运算出结果
  15.     if choice != 3:#如果不是除法
  16.         result = symbollist[choice]
  17.         if result < 0:#如果答案小于0,就再来一遍
  18.             continue
  19.         else:
  20.             result = str(result)#一切正常生成答案
  21.     else:#其他可能(是除法)
  22.         result = symbollist[3][0]
  23.         if a / b == result:#如果没有余数(普通除的答案等于地板除答案)
  24.             result = str(result)
  25.         else:#如果有余数
  26.             result = "%d余%d" % (symbollist[3][0],symbollist[3][1])

  27.     #判断对错
  28.     inputresult = input("%d%s%d%s" % (a, symbolstr[choice], b,"="))#输入答案
  29.     if inputresult == result:#答对啦
  30.         print("你答对了!")
  31.         countT += 1
  32.     else:#答错啦,显示答案
  33.         print("结果貌似不太对!")
  34.         print("答案是:",result)

  35.     count += 1#做的题数量加一
  36.     questionsize -= 1 #计数器减一

  37. timeend = time.time()#计时结束
  38. print("计时结束!")

  39. #答题汇总
  40. print("答题结果汇总:共%d题,答对了%d道,正确率:%d%%" % (count,countT,countT/count*100))
  41. print("     总共用时:%.2f秒,平均每题%.2f秒" % (timeend - timestart,(timeend - timestart)/count))

  42. {:10_277:}
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 00:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表