[关闭]
@A3-327 2017-04-05T14:13:56.000000Z 字数 3524 阅读 611

(第一次综合训练)安全16级2班第5组

  1. #-*- coding:utf-8 -*-
  2. '''
  3. ----------------小组信息--------------
  4. 组长:唐朝
  5. 成员:刘光璞,王鹏飞,王宁伟
  6. ------------------------------------
  7. -------------
  8. 第7题 任意输入4位数字,利用+-×÷四则运算使之得到24。输出 所有不同算法的计算表达式,可为运算优先级而使用括号。
  9. '''
  10. # -*- coding:utf-8 -*-
  11. # -*- coding:utf-8 -*-
  12. numlist = []
  13. for i in range(4):
  14. numlist.append(float(raw_input('请输入第%d个数:'%(i+1))))#输入任意四个数
  15. nlist = [(numlist[0], numlist[1], numlist[2], numlist[3]), (numlist[0], numlist[1], numlist[3], numlist[2]), (numlist[0], numlist[2], numlist[1], numlist[3]), (numlist[0], numlist[2], numlist[3], numlist[1]), (numlist[0], numlist[3], numlist[1], numlist[2]), (numlist[0], numlist[3], numlist[2], numlist[1]), (numlist[1], numlist[0], numlist[2], numlist[3]), (numlist[1], numlist[0], numlist[3], numlist[2]), (numlist[1], numlist[2], numlist[0], numlist[3]), (numlist[1], numlist[2], numlist[3], numlist[0]), (numlist[1], numlist[3], numlist[0], numlist[2]), (numlist[1], numlist[3], numlist[2], numlist[0]), (numlist[2], numlist[0], numlist[1], numlist[3]), (numlist[2], numlist[0], numlist[3], numlist[1]), (numlist[2], numlist[1], numlist[0], numlist[3]), (numlist[2], numlist[1], numlist[3], numlist[0]), (numlist[2], numlist[3], numlist[0], numlist[1]), (numlist[2], numlist[3], numlist[1], numlist[0]), (numlist[3], numlist[0], numlist[1], numlist[2]), (numlist[3], numlist[0], numlist[2], numlist[1]), (numlist[3], numlist[1], numlist[0], numlist[2]), (numlist[3], numlist[1], numlist[2], numlist[0]), (numlist[3], numlist[2], numlist[0], numlist[1]), (numlist[3], numlist[2], numlist[1], numlist[0])]
  16. # print nlist 不重复的4个数的所有排序
  17. olist = [('+', '+', '+'), ('+', '+', '-'), ('+', '+', '*'), ('+', '+', '/'), ('+', '-', '+'), ('+', '-', '-'), ('+', '-', '*'), ('+', '-', '/'), ('+', '*', '+'), ('+', '*', '-'), ('+', '*', '*'), ('+', '*', '/'), ('+', '/', '+'), ('+', '/', '-'), ('+', '/', '*'), ('+', '/', '/'), ('-', '+', '+'), ('-', '+', '-'), ('-', '+', '*'), ('-', '+', '/'), ('-', '-', '+'), ('-', '-', '-'), ('-', '-', '*'), ('-', '-', '/'), ('-', '*', '+'), ('-', '*', '-'), ('-', '*', '*'), ('-', '*', '/'), ('-', '/', '+'), ('-', '/', '-'), ('-', '/', '*'), ('-', '/', '/'), ('*', '+', '+'), ('*', '+', '-'), ('*', '+', '*'), ('*', '+', '/'), ('*', '-', '+'), ('*', '-', '-'), ('*', '-', '*'), ('*', '-', '/'), ('*', '*', '+'), ('*', '*', '-'), ('*', '*', '*'), ('*', '*', '/'), ('*', '/', '+'), ('*', '/', '-'), ('*', '/', '*'), ('*', '/', '/'), ('/', '+', '+'), ('/', '+', '-'), ('/', '+', '*'), ('/', '+', '/'), ('/', '-', '+'), ('/', '-', '-'), ('/', '-', '*'), ('/', '-', '/'), ('/', '*', '+'), ('/', '*', '-'), ('/', '*', '*'), ('/', '*', '/'), ('/', '/', '+'), ('/', '/', '-'), ('/', '/', '*'), ('/', '/', '/')]
  18. #所有的运算符的排列
  19. # print olist 所有运算符的排列
  20. retlist=[]
  21. for nl in nlist :
  22. for ol in olist: #将3个运算符号插入到4个数中
  23. re = [str(nl[0])+'*1.0']+[ol[0]]+[str(nl[1])+'*1.0']+[ol[1]]+[str(nl[2])+'*1.0']+[ol[2]]+[str(nl[3])+'*1.0'] #连接插入运算符
  24. retlist.append(re) #形成带运算符号的数字新列表
  25. lastlist = [] #建立终极列表-带有运算符以及括号的所有式子
  26. for ret in retlist: #通过循环判断是否可加入括号
  27. if ('*' not in ret and '/' not in ret) or ('*' in ret and '/' in ret): #只存在加减或者乘除时不添加括号
  28. lastlist.append(''.join(ret))
  29. else: #混合运算时加入括号 #使用强大的join链接括号于式子 #每一个字符占一位1234567,形如
  30. lastlist.append(''.join(['(']+ret[:3]+[')']+ret[3:])) #(1A3)B5C7
  31. lastlist.append(''.join(['(']+ret[:5]+[')']+ret[5:])) #(1A3B5)C7
  32. lastlist.append(''.join(ret[:2]+['(']+ret[2:5]+[')']+ret[5:])) #1A(3B5)C7
  33. lastlist.append(''.join(ret[:2]+['(']+ret[2:7]+[')'])) #1A(3B5C7)
  34. lastlist.append(''.join(ret[:4]+['(']+ret[4:7]+[')'])) #1A3B(5C7)
  35. lastlist.append(''.join(['(']+ret[:3]+[')']+ret[3:4]+['(']+ret[4:7]+[')'])) #(1A3)B(5C7)
  36. # print lastlist
  37. i = 0
  38. j = 1
  39. for ll in lastlist:
  40. try:
  41. if eval(ll) == 24: # 计算,eval十分强大:将字符串str当成有效的表达式来求值并返回计算结果,核心
  42. print '第',j,'个符合的式子:',ll.replace('*1.0','')+'=24' #去掉'*1.0',显示结果会有一部分不显示1.0
  43. j+=1 #结果的个数
  44. else:
  45. i += 1
  46. except:
  47. #print '除于0错误: '+ll.replace('*1.0','') #表达式中有除于0的
  48. i += 1 #作为最终无解的判断
  49. if i == len(lastlist):#即所有的运算结果都不等于24
  50. print '抱歉,所输入四位数不能构成24'
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注