闲来无事,不知道如何打发无聊时间,突然想到自己有点选择困难症,就想着用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("请确认")

这次加上了用户自定义,用户可以自行定义任务个数和具体任务。但是这还是很简单的前期过程,距离我的预想的还是有一段很长的距离,后续不断完善吧。

物联沃分享整理
物联沃-IOTWORD物联网 » Python小程序制作指南

发表评论