开发者社区> 问答> 正文

盘点那些适合新手入门python的小项目或小例子!

盘点那些适合新手入门python的小项目或小例子!!!

1571893902294_C90451EF-3332-450b-9CD0-0C85B1F1AC76.png

展开
收起
问问小秘 2020-03-12 11:25:30 9717 0
11 条回答
写回答
取消 提交回答
  • 【惊雷】python 新手想做一个项目???那必须的是2048小游戏啊?自己写完还能玩!

    小朋友来看一看,跟着敲起来。

    import random
    import math
    
    
    __mataclass__ = type  # 使用新式类
    
    
    # 此类为地图模块封装的类
    class map2048():
    
        # 重新设置游戏数据
        def reset(self):
            self.__row = 4  # 行数
            self.__col = 4  # 列数
            self.data = [
                [0 for x in range(self.__col)]
                for y in range(self.__row)
            ]
            # self.data = [[x + 4 * y for x in range(self.__col)]
            #              for y in range(self.__row)]
            # self.data = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
            self.fill2()
            self.fill2()
    
        def __init__(self):
            self.reset()
    
        # 获取没有数字的位置的个数
        def get_space_count(self):
            """
            获取没有数字的方格的数量
            """
            count = 0
            for r in self.data:
                count += r.count(0)
            return count
    
        # 获取游戏的得数。
        def get_score(self):
            s = 0
            for r in self.data:
                for c in r:
                    s += 0 if c < 4 else c * int((math.log(c, 2) - 1.0))
            return s
    
        # 填充2到空位置,如果填度成功返回True,如果已满,则返回False,
        def fill2(self):
            blank_count = self.get_space_count()
            if 0 == blank_count:
                return False
            # 生成随机位置
            pos = random.randrange(0, blank_count)
            offset = 0
            for r in self.data:
                for ci in range(self.__col):
                    if 0 == r[ci]:
                        if offset == pos:
                            r[ci] = 2
                            return True
                        offset += 1
    
        # 判断游戏是否结束
        def is_gameover(self):
            for r in self.data:
                # 如果水平方向还有0,则游戏没有结束
                if r.count(0):
                    return False
                # 水平方向如果有两个相邻的元素相同,则没有游戏结束
                for i in range(self.__col - 1):
                    if r[i] == r[i + 1]:
                        return False
            for c in range(self.__col - 1):
                # 竖直方向如果有两个相邻的元素相同,则没有游戏结束
                for r in range(self.__row - 1):
                    if self.data[r][c] == self.data[r + 1][c]:
                        return False
            # 以上都没有,则游戏结束
            return True
    
        # 2048游戏的左移动 (采用"贾琳倩"美女老师的方法进行移动)
        def left(self):
            # moveflag 是否成功移动数字标志位,如果有移动则为真值,原地图不变则为假值
            moveflag = False
            # 将所有数字向左移动来填补左侧空格
            for times in range(self.__col - 1):
                for r in self.data:
                    for c in range(self.__col - 1):
                        if 0 == r[c]:
                            moveflag = True
                            r[c] = r[c + 1]
                            r[c + 1] = 0
            # 判断是否发生碰幢,如果有碰撞则合并,合并结果靠左,右则填充空格
            for r in self.data:
                for c in range(self.__col - 1):
                    if r[c] == r[c + 1]:
                        moveflag = True
                        r[c] *= 2
                        r[c + 1] = 0
            # 再将所有数字向左移动来填补左侧空格
            for times in range(self.__col - 1):
                for r in self.data:
                    for c in range(self.__col - 1):
                        if 0 == r[c]:
                            moveflag = True
                            r[c] = r[c + 1]
                            r[c + 1] = 0
            return moveflag
    
        # 游戏右移操作
        def right(self):
            for r in self.data:
                r.reverse()
            moveflag = self.left()
            for r in self.data:
                r.reverse()
            return moveflag
    
        # 游戏上移操作
        def up(self):
            # moveflag 是否成功移动数字标志位,如果有移动则为真值,原地图不变则为假值
            moveflag = False
            # 将所有数字向上移动来填补上面空格
            for times in range(self.__row - 1):
                for c in range(self.__col):
                    for r in range(self.__row - 1):
                        if 0 == self.data[r][c]:
                            moveflag = True
                            self.data[r][c] = self.data[r + 1][c]
                            self.data[r + 1][c] = 0
            # 判断是否发生碰幢,如果有碰撞则合并,合并结果靠上,下面填充空格
            for c in range(self.__col):
                for r in range(self.__row - 1):
                    if self.data[r][c] == self.data[r + 1][c]:
                        moveflag = True
                        self.data[r][c] *= 2
                        self.data[r + 1][c] = 0
            # 再将所有数字向上移动来填补上面空格
            for times in range(self.__row - 1):
                for c in range(self.__col):
                    for r in range(self.__row - 1):
                        if 0 == self.data[r][c]:
                            moveflag = True
                            self.data[r][c] = self.data[r + 1][c]
                            self.data[r + 1][c] = 0
            return moveflag
    
        # 游戏下移操作
        def down(self):
            self.data.reverse()
            moveflag = self.up()
            self.data.reverse()
            return moveflag
    
    
    
    import sys
    
    if (sys.version_info > (3, 0)):
        from tkinter import *
        from tkinter import messagebox
    else:
        from Tkinter import *
    
    
    game = map2048()
    
    keymap = {
        'a': game.left,
        'd': game.right,
        'w': game.up,
        's': game.down,
        'Left': game.left,
        'Right': game.right,
        'Up': game.up,
        'Down': game.down,
        'q': exit,
    }
    
    game_bg_color = "#bbada0"
    mapcolor = {
        0: ("#cdc1b4", "#776e65"),
        2: ("#eee4da", "#776e65"),
        4: ("#ede0c8", "#f9f6f2"),
        8: ("#f2b179", "#f9f6f2"),
        16: ("#f59563", "#f9f6f2"),
        32: ("#f67c5f", "#f9f6f2"),
        64: ("#f65e3b", "#f9f6f2"),
        128: ("#edcf72", "#f9f6f2"),
        256: ("#edcc61", "#f9f6f2"),
        512: ("#e4c02a", "#f9f6f2"),
        1024: ("#e2ba13", "#f9f6f2"),
        2048: ("#ecc400", "#f9f6f2"),
        4096: ("#ae84a8", "#f9f6f2"),
        8192: ("#b06ca8", "#f9f6f2"),
    }
    
    # 游戏各方块的lable数据
    map_labels = []
    
    
    # 鼠标按下处理函数
    def on_mouse_down(event):
        print("clicked at", event.x, event.y)
    
    
    # 键盘按下处理函数
    def on_key_down(event):
        keysym = event.keysym
        if keysym in keymap:
            if keymap[keysym]():
                game.fill2()
        update_ui()
        if game.is_gameover():
            mb = messagebox.askyesno(title="gameover", message="游戏结束!\n是否退出游戏!")
            if mb:
                exit()
            else:
                game.reset()
                update_ui()
    
    
    # 刷新界面函数
    def update_ui():
        # 更改各个Label的设置
        for r in range(len(game.data)):
            for c in range(len(game.data[0])):
                number = game.data[r][c]
                label = map_labels[r][c]
                label['text'] = str(number) if number else ''
                label['bg'] = mapcolor[number][0]
                label['foreground'] = mapcolor[number][1]
        label_score['text'] = str(game.get_score())
    
    
    # 以下为2048的界面
    root = Tk()
    root.title('2048')
    # root.iconbitmap('./favicon.ico')  # 48x48 ico bitmap
    
    frame = Frame(root, width=300, height=300, bg=game_bg_color)
    frame.grid(sticky=N+E+W+S)
    
    # 设置焦点能接收按键事件
    frame.focus_set()
    frame.bind("<Key>", on_key_down)
    # 以下绑定鼠标按下事件
    # frame.bind("<Button-1>", on_mouse_down)
    # 以下绑定鼠标移动事件
    # frame.bind("<Motion>", on_mouse_down)
    # 以下绑定鼠标抬起事件
    frame.bind("<ButtonRelease-1>", on_mouse_down)
    
    
    
    # 初始化图形界面
    for r in range(len(game.data)):
        row = []
        for c in range(len(game.data[0])):
            value = game.data[r][c]
            text = '' if 0 == value else str(value)
            label = Label(frame, text=text, width=4, height=2,
                          font=("黑体", 30, "bold"))
            label.grid(row=r, column=c, padx=5, pady=5, sticky=N+E+W+S)
            row.append(label)
        map_labels.append(row)
    bottom_row = len(game.data)
    print("button", str(bottom_row))
    label = Label(frame, text='分数', font=("黑体", 30, "bold"),
                  bg="#bbada0", fg="#eee4da")
    label.grid(row=bottom_row, column=0, padx=5, pady=5)
    label_score = Label(frame, text='0', font=("黑体", 30, "bold"),
                        bg="#bbada0", fg="#ffffff")
    label_score.grid(row=bottom_row, columnspan=2, column=1, padx=5, pady=5)
    
    
    def reset_game():
        game.reset()
        update_ui()
    
    
    # restart_button = Button(frame, text='重新开始', command=reset_game)
    restart_button = Button(frame, text='重新开始', font=("黑体", 16, "bold"),
                            # width=4, height=2,
                            bg="#8f7a66", fg="#f9f6f2", command=reset_game)
    restart_button.grid(row=bottom_row, column=3, padx=5, pady=5)
    
    update_ui()
    
    root.mainloop()
    ![微信截图_20200326153758.png](https://ucc.alicdn.com/pic/developer-ecology/208abc9ccf6c4e6e948ee18184f7ae9b.png)
    
    
    
    2020-03-26 15:35:13
    赞同 展开评论 打赏
  • 简单的画爱心表白

    1、图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range;for Y in range)就会每行每列的打印。

    2、Python代码与注释: 1.jpg

    理清思路一行代码实现: 2.jpg

    看上去是三行,在IDE中写作一行Python代码即可实现,如图: 3.jpg

    此图为静态图,效果并不如意,那么我们把它做成动态图并实现图文表白如何?(可自行更改字母内容) 4.jpg

    更改后代码如下: 5.jpg

    好了,这个简单的小表白项目就完了,特别适合新手上手奥。

    2020-03-13 21:18:50
    赞同 展开评论 打赏
  • 这watchs,这stars,这contributors,这forks,地址:https://github.com/geekcomputers/Python image.png

    2020-03-13 21:09:39
    赞同 展开评论 打赏
  • 代码改变世界,我们改变代码

    推荐两个测试开发项目:

    http协议接口自动化测试的框架:

    有兴趣的可以fork

    1.httptesting 新项目,可参与fork

    github坐标:https://github.com/HttpTesting/pyhttp

    pypi坐标:httptesting

    image.png

    2.httprunner

    开源项目较出名,开发者 李隆

    github坐标: https://github.com/httprunner/httprunner

    pypi坐标:https://pypi.org/project/httprunner/

    image.png

    2020-03-13 09:36:28
    赞同 展开评论 打赏
  • 我最初学python,主要是为了高效爬取特定网站的开数据,来解决信息采集费时费力问题,当初是通过ZSpider这个项目来入门的,个人感觉挺不错,万能爬!非常实用!奥利给!特地拿出来与小伙伴分享分享!附加资源信息 项目地址: https://github.com/zhjl120/ZSpider 系统设计图: image.png

    2020-03-12 22:16:25
    赞同 展开评论 打赏
  • 爬虫工程师,擅长scrapy框架,分布式抓取,大并发请求,js逆向等。

    推荐几个新手看的博客 逆向 https://sergiojune.com/ 开发 https://www.cnblogs.com/c-x-a/ https://dream.blog.csdn.net/article/list/1 安卓逆向 http://gouzai.pw/

    2020-03-12 19:09:34
    赞同 1 展开评论 打赏
  • 用Python制作个税计算器

    不知道大家有没有细心观察自己工资条上个人所得税呢?很多人都觉得有专门的个人所得税计算器,不用再去复查,但是有的黑心的公司专门利用这种心理,偶尔增加你的扣税额,为了方便大家核查自己的个人所得税,我用Python写了一个简单的个税计算器,大家可以核查下自己的扣税额。

    1.怎么计算个人所得税? 个税计算器税率表 image.png 对照个税税率表时,先计算出本月的应纳税所得额,再用此应纳税所得额与上表对照,就可以得到正确的税率和速算扣除数。

    个人所得税的基数=应发工资-五险一金,若扣除五险一金后的余额<=3500,则不用缴纳个人所得税。

    下面是五险一金的缴纳比例 image.png 例:应发工资-五险一金-3500=1600,则个税=16000.1-105=55;应发工资-五险一金-3500=5000,个税=50000.2-555=445。

    2.具体代码实现

    def calculator(salary):
        '''
        税后工资计算器
        '''
        point = 3500
        yanglao_rate = 0.08
        hospital_rate = 0.02
        losejob_rate = 0.01
        basemoney_rate = 0.2
    
        five_one_money = salary * (yanglao_rate + hospital_rate + losejob_rate + basemoney_rate)
        rest_money = salary - five_one_money - point
        res_money = salary - five_one_money
        if rest_money <= 1500:
            res_money -= rest_money * 0.03
        elif rest_money > 1500 and rest_money <= 4500:
            tax_money = rest_money * 0.1
            res_money -= (tax_money - 105)
        elif rest_money > 4500 and rest_money <= 9000:
            tax_money = rest_money * 0.2
            res_money -= (tax_money - 555)
        elif rest_money > 9000 and rest_money <= 35000:
            tax_money = rest_money * 0.25
            res_money -= (tax_money - 1005)
        elif rest_money > 35000 and rest_money <= 55000:
            tax_money = rest_money * 0.3
            res_money -= (tax_money - 2755)
        elif rest_money > 55000 and rest_money <= 80000:
            tax_money = rest_money * 0.35
            res_money -= (tax_money - 5505)
        else:
            tax_money = rest_money * 0.45
            res_money -= (tax_money - 13505)
        print('税前工资为:{0},税后工资为:{1}'.format(salary, res_money))
     
     
    if __name__ == '__main__':
        # calculator(one_salary)
        salary_list = [10000, 14000, 15000, 16000, 18000, 25000, 80000, 100000]
        for one_salary in salary_list:
            calculator(one_salary)
    
    

    3.结果展示

    image.png

    2020-03-12 18:23:38
    赞同 展开评论 打赏
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    Python进行微信好友分析 需要模块:

    wxpy是用来查看以及操作微信的第三方模块,通过它可以获取到自己的微信好友的个签,地区以及昵称等.

    pyecharts是做可视化界面的非常强大的工具之一,功能非常齐全,产品的界面非常漂亮

    基本思路:

    通过wxpy登录自己的微信同时获取所有的好友信息,然后进行数据清洗,然后使用pyecharts进行数据展示 部分代码:

    image.png 效果展示: image.png

    2020-03-13 09:29:34
    赞同 1 展开评论 打赏
  • 下一站是幸福

    爬取王者荣耀全套皮肤

    怎么获取全套皮肤?用钱买,或者用爬虫爬取下来~虽然后者不能穿。这个案例稍微复杂一点,但是一个非常值得学习的项目。 思路流程 首先进入所有英雄列表,你会看到下图 图片.png 在这个网页中包含了所有的英雄名称。点击其中一个英雄例如“百里守约”,进去后如下图: 图片.png

    网址中196.shtml以前的字符都是不变的,变化的只是196.shtml。而196是“百里守约”所对应的数字,要想爬取图片就应该进入每个英雄图片所在的网址,而网址的关键就是对应的数字。那么这些数字怎么找呢?

    在所有英雄列表中,打开浏览器的开发者工具,刷新,找到一个json格式的文件,如图所示: 图片.png

    这时就会看到所有英雄对应的数字了。在上图所示的Headers中可以找到该json文件对应的网址形式。将其导入Python,把这些数字提取出来,然后模拟出所有英雄的网址即可

    小节代码: 图片.png

    下载图片

    现在可以进入所有英雄的网址并爬取网址下的图片了。进入一个英雄的网址,打开开发者工具,在NetWork下刷新并找到英雄的皮肤图片。如图所示: 图片.png

    然后在Headers中查看该图片的网址。会发现皮肤图片是有规律的。我们可以用这样的方式来模拟图片网址 图片.png

    在该网址中只有str(v)与str(u)是改变的(str( )是Python中的一个函数),str(v)是英雄对应的数字,str(u)只是图片编号,例如第一个图片就是1,第二个就是2,第三个……而一个英雄的皮肤应该不会超过12个(可以将这个值调到20等)。接着就是下载了。

    下载代码: 图片.png

    执行完上面的代码后只需要执行main函数就行了 图片.png

    爬取下来的图片是这样,每个文件夹里面是该英雄对应的图片,如下图: 图片.png

    2020-03-13 09:29:37
    赞同 展开评论 打赏
  • 说到python,说到新手,那必须提到爬虫啊。用处多,易学习,随时打开新世界的大门。当然要注意:不要侵犯版权,不要违法犯纪。具体项目就推荐一个CSDN的帖子https://blog.csdn.net/nzjdsds/article/details/77506254?utm_source=app

    2020-03-12 17:22:54
    赞同 展开评论 打赏
  • 阿里云头部开发者运营小二

    我推荐几个 youtube-dl 这个程序是一个开源的python项目。支持MacOS、Linux和Windows平台,可以在官网直接下载编译好的程序。可以用来下载YouTube视频,国内的一些视频站也可以进行下载。

    interview_internal_reference 总结了2019年最新的阿里,腾讯,百度,美团,头条等技术面试题目以及答案,分析汇总。

    sherlock 高级机器视觉软件,可以用于广泛的自动化检测应用。它提供了最大的设计灵活性,丰富的已验证的工具和功能。

    DeepFaceLab 这是一个github上的开源项目,所有人都可以查看源代码也能免费使用。个人认为这个项目的最大优点就是安装超级简单,几乎是无需安装,使用过程也不复杂

    2020-03-12 14:15:03
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载