【Python系列】一个简单的抽奖小程序

news2024/11/18 17:43:34

序言

很开心你能在万千博文中打开这一篇,希望能给你带来一定的帮助!👍🏻

如果有什么问题,都可以添加下方我的联系方式,联系我噢~😁

⭐️⭐️⭐️⭐️⭐️沟通交流,一起成为技术达人!!!⭐️⭐️⭐️⭐️⭐️⭐️

⭐️⭐️⭐️⭐️⭐️加油ヾ(◍°∇°◍)ノ゙⭐️⭐️⭐️⭐️⭐️⭐️

写在前面 

因为粉丝福利,所以想自己写一个抽奖小程序,用于实现粉丝抽奖结果。

原本规划的比较理想:

  1. 实时拉取评论用户信息
  2. 数据清洗,数据去重
  3. 存储评论用户信息
  4. 前端酷炫的展示效果

实现结果 

哈哈,但是理想是丰满的,现实是骨感的,加上最近比较忙,就简单写了一下,实现了:

  1. 用户数据拉取
  2. 数据清洗,数据去重
  3. 中奖数据抽取

总体算后端实现了50%吧,前端0%  ,哈哈~~~后面有时间了再进一步吧!😁😁😁

1 数据拉取

用Python 实现的,以下为相关代码。使用过程中,有点报错,最终使用postman,手动获取的,

哈哈哈~~~后面再优化吧

import json
import requests


def request_get(url, param):
    fails = 0
    while True:
        try:
            if fails >= 20:
                break

            ret = requests.get(url=url, params=param, timeout=10)

            if ret.status_code == 200:
                text = json.loads(ret.text)
            else:
                continue
        except:
            fails += 1
            print('网络连接出现问题, 正在尝试再次请求: ', fails)
        else:
            break
    return text


def request_post(url, param):
    fails = 0
    while True:
        try:
            if fails >= 20:
                break

            # headers = {'content-type': 'application/json'}
            ret = requests.post(url, json=param, timeout=10)

            if ret.status_code == 200:
                text = json.loads(ret.text)
            else:
                continue
        except:
            fails += 1
            print('网络连接出现问题, 正在尝试再次请求: ', fails)
        else:
            break
    return text

数据接口不适合放出来,就不放啦~😁

用户数据不知道合不合适放出来,也就不放啦~😁

2 数据清洗、去重

因为我原本想的是要做一个酷炫的前端,也有找到了一些不错的案例,3D抽奖的效果,需要用户头像,就在清洗数据的同时,也存储了用户头像的链接,以下是完整代码:


import json

def getData():
    with open("data.json", 'r') as f:
        temp = json.loads(f.read())

        templist = temp['data']['list']
        user = []
        for i in templist:
            temp={
                'nickName':i['info']['nickName'],
                'avatar':i['info']['avatar']

            }
            user.append(temp)

        result = [dict(t) for t in set([tuple(d.items()) for d in user])]
        print(result)
        print(len(result))
        return result


if __name__ == '__main__':
    getData()

这一步是重复数据去重 

 result = [dict(t) for t in set([tuple(d.items()) for d in user])]

3 中奖数据抽取

中奖名单抽取---完整代码

import random

from giftchoose.userData import getdata


def getgift():
    num = getdata() # 用于存放抽奖用户信息
    print("欢迎来到抽奖小程序!")
    print("参与抽奖的用户如下:")
    for i in num:
        print(i)
    usernum = len(num)
    reward = 2
    usernum = int(usernum)
    reward = int(reward)

    resultList = []                         # 用于存放随机数结果
    def generateRand(counter):
        tempInt = random.randint(0, usernum-1)     # 生成一个范围内的临时随机数
        if(counter <= reward):                   # 先看随机数的总个数是不是够了,如果不够
            if(tempInt not in resultList):  # 再检查当前已经生成的临时随机数是不是已经存在
                resultList.append(tempInt)  # 如果不存在,则将其追加到结果resultList中
                counter += 1                # 然后将表示有效结果的个数加1
            generateRand(counter)           # 不管上面的if是否成立,都要递归。
    generateRand(1)                    # 调用递归函数,并给当前要生成的有效随机数的个序号置为1

    prize = []                              # 用于存放中奖号码
    # 将中奖号码添加到结果prize中
    for j in range(reward):
        prize.append(num[resultList[j]])
    print("\n中奖用户:")           # 输出中奖结果
    for k in range(reward):
        print(prize[k], end="\n")

if __name__ == '__main__':
    getgift()

第二期赠书活动,就用这个程序进行抽奖吧!一起看看是哪些幸运的小伙伴吧~ ⭐️⭐️⭐️⭐️

项目结构,太简单了,其实也算不上项目了😁😁😁😁😁😁

python 相关知识点

list列表去重的方案

循环遍历

old_list = [10, 1, 1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 8, 9, 10, 10]


def one():
    new_list = []
    for i in old_list:
        if i not in new_list:
            new_list.append(i)
    print(new_list)

使用dict:

使用list项作为键创建dict,会自动删除任何重复项,保留原顺序,因为dict不能有重复的键。

old_list = [10, 1, 1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 8, 9, 10, 10]
def useDict():
    new_list = list(dict.fromkeys(old_list))
    print(new_list)

使用set:将list转化为set再转化为list,set有自动去重功能,缺点:新的list不保证原顺序。

def useSet():
    new_list = list(set(old_list))
    print(new_list)

使用set 并保证顺序:不能保证顺序,咱就给他加个原来的key,这样不就保障了嘛~

def keepOrder():
    new_list = list(set(old_list))
    new_list.sort(key=old_list.index)
    print(new_list)

运行结果

本期图书福利

推荐图书:从零开始读懂量子力学(精装加强版)

书籍介绍

内容简介

量子力学是现代物理学的基石,推动了科学技术的快速发展。在今天,量子依然是新闻热点。

本书将为广大科技爱好者系统、严谨地介绍量子力学的基本原理和应用。读者需要熟悉高中物理和数学的相关内容,愿意学习科学的思维方式。虽然量子力学是一门有着神秘面纱、打破生活常识、颠覆人类认知的现代科学,但是读者只要愿意随着本书一起思考,就一定能够清楚地了解量子力学理论的基本概念,最终全面认识它在科学体系中的作用和对现代技术的贡献。

本书的叙述方式是一边讲解科学理论,一边介绍重要的实验现象和科学原理的应用。本书在第一篇中依次讲解了状态叠加、波粒二象性、不确定性原理等基本概念;在第二篇中介绍了量子力学在凝聚态物理和基本粒子物理领域中的应用。同时,对由量子力学催生的现代电子技术,也着重做了介绍。

作者简介

戴瑾,毕业于北京大学物理系。早年从事理论物理学研究。赴美国德克萨斯大学留学,加入了诺贝尔物理奖获得者温伯格的研究小组,师从基础物理突破奖获得者Joeseph Polchinski教授,获得博士学位。与Polchinski共同创造了超弦理论中的D-膜分支。后又在无线通信和半导体芯片领域工作二十余年。现任某半导体公司高管。

等不及的小伙伴也可以点击下方链接先睹为快:

《从零开始读懂量子力学(精装加强版)》

参与方式

图书数量:本次送出 3 本   !!!⭐️⭐️⭐️
活动时间:截止到 2023-05-10 12:00:00

抽奖方式

  • 2本,送给 高质量评论且该评论赞数的前两名!
  • 1本,评论区随机挑选一位小伙伴送书一本!


参与方式关注博主、点赞、收藏,评论区留言 

中奖名单 

🍓 获奖名单🍓

 中奖名单:请关注博主动态

名单公布时间:2023-05-10 15:30:00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC底层原理源码解析

SpringMVC的作用毋庸置疑&#xff0c;虽然我们现在都是用SpringBoot&#xff0c;但是SpringBoot中仍然是在使用SpringMVC来处理请求。 我们在使用SpringMVC时&#xff0c;传统的方式是通过定义web.xml&#xff0c;比如&#xff1a; <web-app><servlet><servle…

jenkins配置笔记

文章目录 1.装Gogs插件2.配置截图及说明3.其他1.装Gogs插件 Gogs 插件是一个专门为集成 Gogs(一种类似于 Git 的开源版本控制系统)与 Jenkins 进行交互的插件。它允许 Jenkins 与 Gogs 之间进行双向通信,提高了 Jenkins 对于代码管理和构建的支持。 2.配置截图及说明 目前…

【操作系统】第二章进程与线程、处理机调度与调度算法

文章目录 &#x1f337; 一、进程的定义、组成、组织方式及特征⭐️ 1、 进程的定义⭐️ 2、 进程实体的组成⭐️ 3、 进程的组织⭐️ 4、 进程的特征 &#x1f337; 二、进程的状态与转换⭐️ 1、 状态⭐️ 2、 进程状态间的转换 &#x1f337; 三、进程控制⭐️ 1、 定义⭐️…

SwiftUI 新 Alert 弹出窗口圆你文本输入之梦

概览 小伙伴们都知道&#xff0c;弹出 Alert 不能包含文本输入框是 SwiftUI 的阿喀琉斯之踵(Achilles’ Heel) 。当然&#xff0c;这说的有些夸张了。&#x1f609; 不过&#xff0c;Alert 不能包含 TextField 在某些情况下着实不方便。于是乎&#xff0c;从 SwiftUI 3.0&…

JAVA模拟堆

堆的性质 堆是一种特殊的树。 只要满足以下两点&#xff0c;它就是一个堆&#xff1a; 堆是一个完全二叉树。堆中每一个节点的值都必须大于等于&#xff08;或小于等于&#xff09;其子树中每个节点的值。 第一点&#xff0c;堆必须是一个完全二叉树。完全二叉树要求&#…

O2OA (翱途) 平台 V8.0 发布新增数据台账能力

亲爱的小伙伴们&#xff0c;O2OA (翱途) 平台开发团队经过几个月的持续努力&#xff0c;实现功能的新增、优化以及问题的修复。2023 年度 V8.0 版本已正式发布。欢迎大家到 O2OA 的官网上下载进行体验&#xff0c;也希望大家在藕粉社区里多提宝贵建议。本篇我们先为大家介绍应用…

Android 输入系统

概述 Android 输入系统的工作原理概括来说&#xff0c;内核将原始事件写入到设备节点中&#xff0c;InputReader 不断地通过 EventHub 将原始事件取出来并翻译加工成 Android 输入事件&#xff0c;然后交给 InputDispatcher。 InputDispatcher 根据 WMS 提供的窗口信息将事件…

24.Stream流

Stream流 一、什么是Stream流 Stream流操作是Java 8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&…

2023全栈开发人员职业路线图

0. 全栈开发人员职业路线图 全栈开发人员是IT行业中薪资最高的职业之一。 如果您想成为一名全栈开发人员&#xff0c;以下是2023年全栈开发人员路线图上的十一个步骤&#xff1a; 掌握敏捷开发和Scrum学习浏览器技术&#xff0c;如HTML和CSS熟练掌握JavaScript或TypeScript了…

单月涨粉303.72w,反差感才是主流吗?

据新抖「直播带货风向」数据显示&#xff0c;抖音4月的直播商品数量达到1021.32w&#xff0c;较上月的695.91w环比增长50.18%&#xff0c;直播销量环比增加16.81%。从这几个数值就可以看出4月的抖音电商依旧如火如荼...... 那么&#xff0c;4月&#xff0c;抖音又出现哪些新的看…

“世界中医药之都” 亳州市医保局领导一行莅临万民健康交流指导

为进一步推进智慧医疗、智慧服务、智慧管理“三位一体”为主旨的“智慧中医、健康社区”项目建设。2023 年 5 月 3 日&#xff0c;“世界中医药之都” 亳州市医保局 局长 吴旭春 、 医保中心主任秦克靖 、 办公室主任徐伟 等一行 5 人莅临 万民健康交流 指导工作 &#xff0c…

day27_mysql

今日内容 零、 复习昨日 一、单表查询 二、多表联查 零、 复习昨日 1 DDL,DML,DQL是啥 DDL 数据定义语言&#xff08;库&#xff0c;表&#xff0c;列&#xff09;DML 数据操作语言&#xff08;表内数据的操作增删改&#xff09;DQL 数据查询语言&#xff08;表内数据的查询&am…

酷游浅谈网站Javas cript型别

最近整理了一下&#xff0c;【酷游娜娜手机&#x1d54d;找看看nay3989提供】就决定跟大家讨论一下最近对于Javascripet的型别认识。 弱型别&#xff36;&#xff33; 强型别 Javascripet是一种「弱型别」的语言&#xff0c;所以会产生很多你意想不到恶心的事情 至于什么是弱…

软件测试、测试和开发、测试和调试【详细介绍】

目录 一、什么是软件测试 1.软件测试的定义 2.软件测试的目的 3.软件测试的不可穷性 二、开发和测试的区别 三、测试和调试的区别 一、什么是软件测试 在日常生活中&#xff0c;测试是无处不在的。比如新买的手机是否好用、新买的衣服穿着是否合身等等场景&#xff0c;均…

点成案例丨细胞培养芯片用于构建肠模型实例分享

器官芯片是一种利用微芯片制造技术制造的微流体细胞培养设备。该设备包含多个连续灌注腔室&#xff0c;具有多细胞层结构、组织界面、物理化学微环境以及人体血管循环等特征&#xff0c;可以模拟和重构人体器官的生理功能&#xff0c;为相关研究提供了可靠的平台。器官芯片技术…

java中设计模式总结

设计模式是实际工作中写的各种代码进行高层次抽象的总结&#xff0c;其中最出名的当属 Gang of Four (GoF) 的分类了&#xff0c;他们将设计模式分类为 23 种经典的模式&#xff0c;根据用途又可以分为三大类&#xff0c;分别为创建型模式、结构型模式和行为型模式。 有一些重…

【6D位姿估计】Point Pair Feature (PPF)

论文链接:Drost et al. Model Globally, Match Locally: Efficient and Robust 3D Object Recognition. CVPR, 2010. Model Globally, Match Locally 论文名字用 4 个词高度总结了 PPF 算法的精髓:“整体建模,局部匹配”。 下面这张图反应了论文的基本思想(算法概要): …

【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解

目录 Tabs介绍Tabs使用例子TabBar 样式设置定义菜单样式对象-NavigationItem定义一个底部菜单栏集合数据-NavigationList修改TabBuilder Tab 组件控制题外话 现在市场上的大部分应用&#xff0c;主页都是才用底部导航栏菜单作为页面主体框架来展示&#xff0c; 在鸿蒙中是使用…

STM32库函数笔记分享

之前刚开始自学的部分STM32笔记放出&#xff0c;希望对新入门STM32和想要复习库函数的小伙伴们起到帮助。 建立工程 1.寄存器操作方式 需要不断地查手册来了解每一位是干什么用的 优点&#xff1a;代码简介&#xff1b; 缺点&#xff1a;不太方便。 2.库函数操作方式 1.调用库函…

【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

文章目录 一、接雨水方法一&#xff1a;按列求&#xff08;动态规划&#xff09;方法二&#xff1a;双指针方法三&#xff1a;单调栈 二、直方图最大矩形面积单调栈哨兵位优化 三、矩阵中最大的矩形前缀和单调栈 一、接雨水 题目链接 题目描述&#xff1a; 给定 n 个非负整数…