鱼C论坛

 找回密码
 立即注册
查看: 3017|回复: 10

[已解决]谁来帮帮我

[复制链接]
发表于 2020-3-26 12:37:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
哎,我想做一个算术游戏,可是咋也做不好。谁来帮我看看是咋么回事并改进?代码如下:
  1. #由于需要使用到random函数,所以先导入进来-_-
  2. import random
  3. def main1(num1,num2,a,b):
  4.     """定义第一个主要部分
  5.     num1和num2是随机数的两个对应的随机数
  6.     a是加减乘除的类型序号,b是是否多位数的类型序号"""
  7.     if b == 1:
  8.         le = 3
  9.     else:
  10.         le = 5
  11.     li = []
  12.     if a == 1:
  13.         h1 = 1
  14.         h2 = 2
  15.     elif a == 2:
  16.         h1 = 3
  17.         h2 = 4
  18.     else:
  19.         h1 = 1
  20.         h2 = 4
  21.     for i in range(le-b):
  22.         li.append(random.randint(num1,num2))
  23.     li.append("|")
  24.     for i in range(b):
  25.         li.append(random.randint(h1,h2))
  26.     li.append("|")
  27.     if le == 3:
  28.         li.append(input("{0}{1}{2}=".format(li[0],li[3],li[1])))
  29.     else:
  30.         li.append(input("{0}{1}{2}{3}{4}".format(li[0],li[4],li[1],li[5],li[2])))
  31.     li.append("|")
  32.     li.append(le)
  33. def main2(num1,num2,typed):
  34.     """定义第二个主要部分
  35.     num1和num2是随机数的两个对应的随机数
  36.     typed则是类型,a是加减,b是乘除,c是加减乘除,此外,如果再加上一个'd',那就不是两个数一个符号,而是三个数两个符号"""
  37.     if typed.find("a") != -1:
  38.         if typed == "ad":
  39.             return main1(num1,num2,1,2)
  40.         else:
  41.             return main1(num1,num2,1,1)
  42.     if typed.find("b") != -1:
  43.         if typed == "bd":
  44.             return main1(num1,num2,2,2)
  45.         else:
  46.             return main1(num1,num2,2,1)
  47.     if typed.find("c") != -1:
  48.         if typed == "cd":
  49.             return main1(num1,num2,3,2)
  50.         else:
  51.             return main1(num1,num2,3,1)
  52. def check(*num,result):
  53.     """定义检查部分"""
  54.     true_result = 0
  55.     that_result = 0
  56.     if len(num) == 3:
  57.         for i in range(1):
  58.             h = [num[i],num[i+1]]
  59.             if num[-i] == 1:
  60.                 that_result = h[0] + h[1]
  61.             if num[-i] == 2:
  62.                 that_result = h[0] - h[1]
  63.             if num[-i] == 3:
  64.                 that_result = h[0] * h[1]
  65.             if num[-i] == 4:
  66.                 that_result = h[0] / h[1]
  67.             true_result = true_result + that_result
  68.     else:
  69.         for i in range(2):
  70.             h = [num[i],num[i+1]]
  71.             if num[-i] == 1:
  72.                 that_result = h[0] + h[1]
  73.             if num[-i] == 2:
  74.                 that_result = h[0] - h[1]
  75.             if num[-i] == 3:
  76.                 that_result = h[0] * h[1]
  77.             if num[-i] == 4:
  78.                 that_result = h[0] / h[1]
  79.             true_result = true_result + that_result
  80.     if true_result == result:
  81.         print("做对啦!")
  82.         return 1
  83.     else:
  84.         print("不对哦。")
  85.         return 0
  86. def others(*_list):
  87.     """定义一个能帮助下面的doing函数的函数"""
  88.     #两个数一个符号的li列表的实例:["1","1","|","+","|","2","|","3"]
  89.     #三个数两个符号的li列表的实例:["1","1","1","|","+","-","|","3","|","5"]
  90.     if _list[-1] == 3:
  91.         return check(num=(_list[0],_list[1],_list[3]),result=_list[5])
  92.     else:
  93.         return check(num=(_list[0],_list[1],_list[2],_list[4],_list[5]),result=_list[7])
  94. def doing():
  95.     """定义一个可以给用户体验的一个函数"""
  96.     print("这是一个可以考验你的计算能力的程序。你准备好了吗?")
  97.     l1 = [1,1,20,30,30,100,215,400]
  98.     l2 = [10,9,50,100,100,300,500,1000]
  99.     l3 = ["a","bd","a","c","cd","b","cd","c"]
  100.     score = 20
  101.     for i in range(8):
  102.         while score < 30 or score > 0:
  103.             if others(main2(l1[i],l2[i],l3[i])) == 1:
  104.                 score += 1
  105.             else:
  106.                 score -= 2
  107.         if score >= 30:
  108.             if i == 7:
  109.                 print("您已挑战成功!您的计算能力已经很强了。")
  110.                 break
  111.             else:
  112.                 print("您已通关!")
  113.         else:
  114.             print("您已挑战失败。您在第%s关被终止。" % str(i+1))
  115.             break
  116. doing()
复制代码
最佳答案
2020-3-26 14:32:52
eval是python内置函数,,可以随便用,,示例如下:
>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85
很方便,,把你代码换个思路,,让用户输入一个字符串,,你把得到的字符串eval一下就行了,哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 12:39:33 | 显示全部楼层
问题是?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 12:48:16 | 显示全部楼层
游戏规则?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 12:53:43 | 显示全部楼层
有个eval函数用于计算表达式的值:
String s = "10 * 2 + 6 / (3 - 1)";
String result = String.valueOf(scriptEngine.eval(s));
这是java的,不知道python有没有,估计肯定有类似的,你可以找一找
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 14:09:53 | 显示全部楼层
请先学会提问
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 14:24:52 | 显示全部楼层
bigbird0419 发表于 2020-3-26 12:53
有个eval函数用于计算表达式的值:
String s = "10 * 2 + 6 / (3 - 1)";
String result = String.valueOf( ...

有,eval
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 14:32:52 | 显示全部楼层    本楼为最佳答案   
eval是python内置函数,,可以随便用,,示例如下:
>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85
很方便,,把你代码换个思路,,让用户输入一个字符串,,你把得到的字符串eval一下就行了,哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 09:47:01 | 显示全部楼层
本帖最后由 陈尚涵 于 2020-4-7 09:52 编辑

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

使用道具 举报

 楼主| 发表于 2020-4-8 10:35:08 | 显示全部楼层
我刚才参考了一本书,除了eval这个函数,还有一个和他相似的exec函数,谢啦!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 21:12:01 | 显示全部楼层
exec更强大
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 15:12:31 | 显示全部楼层
考古,没想到20年就会格式化了。我记得我好像是在3.8的时候学会的吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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