|
楼主 |
发表于 2018-9-5 19:51:31
|
显示全部楼层
9/5版本更新1.7[/- [/code]size]
- [size=1]又TMD开学了,军训手机更新格式错乱见谅[/size]
- 修复了:
- 1.优化部分代码
- 更新了:
- 1.支持两次撤回
- [code]#二十四点游戏
- #verson 1.7
- import random
- import os
- import os.path
- #记分板
- if os.name == 'posix':
- os.chdir('/storage/emulated/0')#安卓底层目录无法写入,更改目录
- if os.path.exists('mark.txt'):
- mark = open('mark.txt','r')
- past_mark = mark.read()
- mark.close
- if past_mark == '':
- past_mark = 0
- else:
- print('总分:%s分' % (past_mark))
- else:
- past_mark = 0
- randon_number = list() #保存随机数
- available_number = list() #保存计算结果
- whole_number = list() #所有数字
- clear_list = list() #清除使用过的数字
- total_mark = 0
- reset = list() #用于撤回
- step_amount = 0 #保存步数
- sign = ('r','c','/',' ','+','-','*','÷','^','q')
- recall = False #保存撤回状态
- #检查用户输入正误
- def check_module(alist):
- chars = alist.split()
- for each in chars:
- if ((each not in str(randon_number)) and ((each not in sign) and (each not in str(available_number)))):
- print('输入有误,你输入了一个不存在或用过的数啦')
- return True
- else:
- continue
- return False
- #计算模块
- def cacul_module(x):
- if x[1] == '+':
- return int(x[0]) + int(x[2])
- elif x[1] == '-':
- return int(x[0]) - int(x[2])
- elif x[1] == '*':
- return int(x[0]) * int(x[2])
- elif x[1] == '÷' or x[1] == '/':
- return int(x[0]) / int(x[2])
- elif x[1] == '^':
- return pow(int(x[0]),int(x[2]))
- def number():
- for x in range(4):
- global randon_number
- global whole_number
- randon_number.append(random.randint(1,10))
- whole_number.append(randon_number[x])
- print("你的四个数为:",sorted(randon_number))
- def callback(load,number):
- global recall
- if step_amount == 0:
- pass
- else:
- if recall == True:
- number -= 1
- available_number.pop()
- whole_number.pop()
- for x in load:
- print(x,number)
- if x[2] == number:
- if x[0] == 'a':
- available_number.append(x[1])
- elif x[0] == 'r':
- randon_number.append(x[1])
- print(available_number,randon_number,whole_number)
- recall = True
- print('–––––––——————二十四点游戏——————–––––––')
- print('JuneFox present')
- #生成四个随机数
- number()
- #判断
- while True:
- #输入
- input_list = input( "输入字符r可以重新生成一组数字\n输入字符q可以退出\n在这输入算式\t" )
- #输入正误检查
- while (check_module(input_list)):
- input_list = input( "在这输入算式\t" )
- use_list = input_list.split()
- #输入处理
- if "r" in use_list:
- whole_number = []
- randon_number = []
- number()
- continue
- elif 'q' in use_list:
- print('退出中...')
- break
- elif 'c' in use_list:
- callback(reset,step_amount)
- else:
- step_amount += 1
- recall = False
- print('算式为:',input_list)
- #清除用过的数
- clear_list = use_list[:]
- for x in whole_number:
- if str(x) in clear_list:
- if x in available_number:
- available_number.remove(x)
- clear_list.remove(str(x))
- reset.append(['a',x,step_amount])
- elif x in randon_number:
- randon_number.remove(x)
- clear_list.remove(str(x))
- reset.append(['r',x,step_amount])
- print(reset)
- #计算
- try:
- x = cacul_module(use_list)
- available_number.append(x)
- whole_number.append(x)
- except IndexError:
- print('输入有误')
- break
- print("当前可用结果:",sorted(available_number))
- #检测结果
- # print(available_number,randon_number,whole_number,clear_list)
- if (len(randon_number) + len(available_number) <= 1):
- if 24 in available_number:
- print("成功\n你用了%d步" % (step_amount))
- total_mark += 1
- else:
- print("失败")
- randon_number = list()
- available_number = list()
- whole_number = list()
- clear_list = list()
- step_amount = list()
- number()
- continue
- print('本次得分:',total_mark)
- mark = open('mark.txt','w')
- total_mark = str(total_mark + int(past_mark))
- mark.write(total_mark)
- mark.close()
复制代码
|
|