闲来无事,不知道如何打发无聊时间,突然想到自己有点选择困难症,就想着用python写个简单的程序,通过随机算法来帮我做选择,于是便有了这篇文章。
首先就是先做一些前期规划
先把自己想到的写下来,这样子,执行的时候,就可以很好地进行了。
内容如下
1.先进行设计。
本软件主要是为了解决选择困难证,预设了几种方案用于打发时间。
下面是方案设计:
方案1:学习HTML的不同设备显示问题
方案2:将本软件用Android实现
方案3:将本软件用HTML实现
方案4:玩游戏
方案5:拍一个物品
(我后来想到每个人的方案是不一样的,所以改良版也在逐渐进行。)
初步构思:
python有很多组合,但是要找到一种适用于本软件的组合用于存放方案内容。
首先,我想到了用字典的方式去实现。但是由于字典是映射类的,不是序列类型的,所以字典是不可以通过下标来找到相应的value值的。
我还想到了集合,但是集合是无序的,所以pass掉它了。
最后只能是序列了,而序列里面由于元组是不可变的,所以目前只剩下一个可选项了——列表了。
我预想的是,将语句赋给某些字符,然后这些字符组合成列表。
然后我们采用随机的方法来进行抽取,为了保证随机性,我们采用连续两次筛选,将第一次随机出来的值赋给第二次的种子。
在结果输出这里我们又产生了两种方案:
方案一:将这个结果字符所代表的方案打印出来
方案二:我们先打印方案,然后选出字符,并输出字符,最后根据方案进行任务选择。
但是方案二很明显违背了我一开始的初衷,根据心理学,如果一堆选项里面选择,虽然已经有了答案,但是我们通常都会选择最好的,而不是那个正确的,因此我决定pass第二个方案。
于是我便开始写代码,
代码如下:
#先定义好各种数据
A = "学习HTML的不同设备适配问题"
B = "将本软件用Android实现"
C = "将本软件用HTML实现"
D = "玩游戏"
E = "拍一个物品"
#定义列表
List = [A,B,C,D,E]
#可以输出即可
#print(a)
#先引入库,也可以不引入numpy库,防止软件过大
import random
import numpy as np
#开始随机种子
s = random.randint(1, 10)
#测试随机数是什么
#print(s)
np.random.seed(s)
a = np.random.randint(0,100)
#print(a)
while a > len(List):
a = a % 10
#print(a)
if (a < len(List)) & (a < 10):
break
elif (a > len(List)) & (a < 10):
a = a % 2
#print("这是第二个")
#print(a)
else:
continue
print("这是你的随机任务:")
print(List[a])
input("请确认")
整体看来,代码其实还是很简单的,所以我后续还想着要不要做一个python的界面等等操作。
在整个操作期间,最难的是将文件打包成exe文件。我用的是pyintsaller,相关的安装方法有很多文章介绍过了,这里不再赘述。我尝试了很多遍,一开始的时候,双击打开exe文件,窗口都是一闪而过,而不是显示出稳定的画面,所以我上网找了很多方法。
一开始,我找到的是解决方法是,没有在结束的时候加上input语句的,网上的方法说这样就可以避免因为程序简单而导致的一闪而过。但是在加上这个语句之后,它还是一闪而过,我百思不得其解。
后来因为一些预设词的引导,我开始想到是不是因为闪退而造成的,于是我又开始进行翻阅,最后在这里找到了解决方法。
截图如下:
通过图中方法,我找到了问题关键所在,由于打包的时候并没有加上numpy库,这里忘记截图了。所以我只能无奈删除相关代码,最后再次打包,发现可以正常打开使用了。
在键盘按下enter键之后,它便关闭了。
后续我还打算,提供自定义的方案,让用户自行决定方案,然后就是进行界面显示。就这样吧,下期见。
代码更新:
print("选择困难症终结者,本软件主要用于解决选择困难症,版本:2.0")
num = int(input('请输入你的方案数:'))
#定义列表
List = []
for i in range(0,num):
List.append((input('请输入方案:')))
#先引入库
import random
#开始随机种子
s = random.randint(1, 10)
#测试随机数是什么
#print(s)
random.seed(s)
a = random.randint(0,100)
#print("a = ",a)
while a >= len(List):
a = a % 10
#print(a)
if (a < len(List)) & (a < 10):
break
elif (a > len(List)) & (a < 10):
a = a % 2
#print("这是第二个")
#print(a)
else:
continue
print("这是你的随机任务:",List[a])
input("请确认")
这次加上了用户自定义,用户可以自行定义任务个数和具体任务。但是这还是很简单的前期过程,距离我的预想的还是有一段很长的距离,后续不断完善吧。