python爬虫初体验(五)—— 边学边玩小游戏

1. 打开浏览器

利用webbrowser 模块的 open()函数可以启动一个新浏览器,打开指定的 URL。

import webbrowser 
webbrowser.open('http://inventwithpython.com/') 

2. 猜数字游戏

# -*- coding: utf-8 -*-
# This is a guess the number game.
import random

secretNumber = random.randint(1, 20)
print('I am thinking of a number between 1 and 20.')

# Ask the player to guess 6 times.
for guessesTaken in range(1, 7):
  print('Take a guess.')
  guess = int(input())

  if guess < secretNumber:
    print('Your guess is too low.')
  elif guess > secretNumber:
    print('Your guess is too hight.')
  else:
    break # This condition is the correct guess!

if guess == secretNumber:
  print('Good job!You guessed my number in ' + str(guessesTaken) + ' guesses!')
else:
  print('Nope. The number I was thinking of was ' + str(secretNumber))

3. 贪吃蛇游戏

# -*- coding: utf-8 -*-
import curses
import random

def main(stdscr):
    # 隐藏光标
    curses.curs_set(0)
    # 设置非阻塞输入模式
    stdscr.nodelay(1)
    # 设置刷新间隔为100毫秒
    stdscr.timeout(100)

    # 获取屏幕的高度和宽度
    sh, sw = stdscr.getmaxyx()

    # 初始化蛇的位置,初始时蛇只有一个单元格
    snake = [(sh//2, sw//2)]
    # 初始方向为向右
    direction = curses.KEY_RIGHT

    # 随机生成食物的位置
    food = (random.randint(1, sh-2), random.randint(1, sw-2))
    # 在屏幕上显示食物
    stdscr.addch(food[0], food[1], '*')

    while True:
        # 获取用户输入的按键
        key = stdscr.getch()

        # 根据用户输入更新方向
        if key in [curses.KEY_RIGHT, curses.KEY_LEFT, curses.KEY_UP, curses.KEY_DOWN]:
            direction = key

        # 获取蛇头的位置
        head = snake[0]
        
        # 根据当前方向计算新的蛇头位置
        if direction == curses.KEY_RIGHT:
            new_head = (head[0], head[1] + 1)
        elif direction == curses.KEY_LEFT:
            new_head = (head[0], head[1] - 1)
        elif direction == curses.KEY_UP:
            new_head = (head[0] - 1, head[1])
        elif direction == curses.KEY_DOWN:
            new_head = (head[0] + 1, head[1])

        # 将新的蛇头插入到蛇的头部
        snake.insert(0, new_head)

        # 如果新的蛇头位置与食物位置相同,则生成新的食物
        if snake[0] == food:
            food = (random.randint(1, sh-2), random.randint(1, sw-2))
            stdscr.addch(food[0], food[1], '*')
        else:
            # 如果没有吃到食物,移除蛇尾
            tail = snake.pop()
            stdscr.addch(tail[0], tail[1], ' ')

        # 检查游戏是否结束
        if (snake[0][0] in [0, sh-1] or
            snake[0][1] in [0, sw-1] or
            snake[0] in snake[1:]):
            # 显示游戏结束信息
            stdscr.addstr(sh//2, sw//2 - 5, "Game Over!")
            stdscr.refresh()
            # 暂停2秒
            curses.napms(2000)
            break

        # 在屏幕上显示新的蛇头
        stdscr.addch(snake[0][0], snake[0][1], '#')

# 使用curses.wrapper来初始化和清理curses环境
curses.wrapper(main)

4. 井子棋

# -*- coding: utf-8 -*-
import curses
import random

def print_board(board):
    """
    打印当前的游戏棋盘。
    :param board: 3x3 的二维列表,表示当前的棋盘状态。
    """
    for row in board:
        print " | ".join(row)  # 使用 '|' 分隔符打印每一行
        print "-" * 5  # 打印分隔线

def check_winner(board, player):
    """
    检查当前玩家是否赢了。
    :param board: 3x3 的二维列表,表示当前的棋盘状态。
    :param player: 当前玩家的符号 ('X' 或 'O')。
    :return: 如果当前玩家赢了,返回 True;否则返回 False。
    """
    # 检查每一行是否有三个相同的符号
    for row in board:
        if all([cell == player for cell in row]):
            return True

    # 检查每一列是否有三个相同的符号
    for col in range(3):
        if all([board[row][col] == player for row in range(3)]):
            return True

    # 检查两条对角线是否有三个相同的符号
    if all([board[i][i] == player for i in range(3)]) or all([board[i][2-i] == player for i in range(3)]):
        return True

    return False

def main():
    """
    主函数,控制游戏的流程。
    """
    # 初始化棋盘
    board = [[' ' for _ in range(3)] for _ in range(3)]
    current_player = 'X'  # 当前玩家

    while True:
        print_board(board)  # 打印当前棋盘

        # 获取用户输入的行和列
        row = int(raw_input("Enter row (0, 1, 2): "))
        col = int(raw_input("Enter column (0, 1, 2): "))

        # 检查所选单元格是否已被占用
        if board[row][col] != ' ':
            print "Cell already occupied. Try again."
            continue

        # 更新棋盘
        board[row][col] = current_player

        # 检查当前玩家是否赢了
        if check_winner(board, current_player):
            print_board(board)  # 再次打印棋盘
            print "Player {} wins!".format(current_player)
            break

        # 检查是否平局
        if all([cell != ' ' for row in board for cell in row]):
            print_board(board)  # 再次打印棋盘
            print "It's a tie!"
            break

        # 切换玩家
        current_player = 'O' if current_player == 'X' else 'X'

if __name__ == "__main__":
    main()  # 运行主函数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA leetcode插件代码模板配置,登录闪退解决

前言 最近换电脑&#xff0c;配置idea时和原来的模板格式不一样有点难受&#xff0c;记录一下自己用的模板&#xff0c;后期换电脑使用&#xff0c;大家也可以使用&#xff0c;有更好的地方可以分享给我~ IDEA leetcode插件代码模板配置,登录闪退解决 前言1 下载IDEA leetcode…

kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署

前言&#xff1a;半月前在公司生产环境上离线部署了k8s集群Victoria Metrics(二开版)自研版夜莺 监控平台的搭建&#xff0c;下面我租用3台华为云服务器演示部署kubesphere环境-本地Harbor仓库k8s集群&#xff08;单master节点 & 单master节点&#xff09;Prometheus监控部…

Node.js | npm下载安装及环境配置教程

前言&#xff1a; npm 是 Nodejs 下的包管理器&#xff0c;在下载 Node.js 后自动安装&#xff0c;因此本文同时适合 Node.js / npm 的下载安装及环境配置。 一、软件安装 Node.js中文网官网下载页&#xff1a;Node.js 中文网 (nodejs.com.cn) 1&#xff09;进入下载页&#xf…

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

游戏引擎学习第14天

1. 为什么关注内存管理&#xff1f; 内存分配是潜在的失败点&#xff1a; 每次进行内存分配&#xff08;malloc、new等&#xff09;时&#xff0c;都可能失败&#xff08;例如内存不足&#xff09;。这种失败会引入不稳定性或不可预测性&#xff0c;需要额外的错误处理逻辑。 …

QT6学习第一天

QT6安装和示例运行 QT介绍QT特点QT开发框架QT Quick和QML介绍Qt Widgets和Qt QuickQT6下载安装QT Creator介绍QT Creator界面介绍 QT介绍 Qt是一个跨平台的应用程序和UI开发框架&#xff0c;可用于桌面、嵌入式和移动平台的应用程序和用户界面的开发。 使用Qt只需一次性开发应…

一文详细深入总结服务器选型

1. 题记&#xff1a; 服务器选型工作是项目规划检讨的一项非常重要的工作&#xff0c;本文详细深入总结服务器选型。 2. 服务器基础知识概览 2.1 服务器的定义与功能 2.1 .1 定义 服务器是一种高性能计算机&#xff0c;其设计目的是在网络中提供服务。它可以处理来自多个客…

打造旅游卡服务新标杆:构建SOP框架与智能知识库应用

随着旅游业的蓬勃兴起&#xff0c;旅游卡产品正逐渐成为市场的焦点。为了进一步提升服务质量和客户体验&#xff0c;构建一套高效且标准化的操作流程&#xff08;SOP&#xff09;变得尤为重要。本文将深入探讨如何构建旅游卡的SOP框架&#xff0c;并介绍如何利用智能知识库技术…

基于Python爬虫大屏可视化的热门旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

uni-app移动端与PC端兼容预览PDF文件

过程遇到的问题 1、如果用的是最新的版本的pdfjs的话&#xff0c;就会报Promise.withResolvers 不是一个方法的错误&#xff0c;原因是Promise.withResolvers是ES15新特性&#xff0c;想了解可参考链接&#xff0c;这里的解决方案是将插件里的涉及到Promise.withResolvers的地…

shell编程--永久环境变量和字符串显位

环境变量 echo $HOME 在终端输出后会显示家目录有个root变量 我们会提出个疑问为什么平时我们在终端输入sl 或者which等等命令会输出一些内容呢&#xff0c;这是因为这些命令都有对应的环境变量。 我们查看一下环境变量 在终端输入&#xff1a; echo $PATH 我们看一下输出…

vue3 + vite 进行axios请求封装及接口API的统一管理

前言 在Vue 3项目中使用Vite进行开发时&#xff0c;对axios进行请求封装以及统一管理接口API是非常常见的做法。这不仅可以提高代码的复用性和可维护性&#xff0c;还能统一处理请求和响应&#xff0c;管理错误处理逻辑等。下面是一个详细的步骤和示例代码&#xff0c;来说明如…

十三、注解配置SpringMVC

文章目录 1. 创建初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建WebConfig配置类&#xff0c;代替SpringMVC的配置文件4. 测试功能 1. 创建初始化类&#xff0c;代替web.xml 2. 创建SpringConfig配置类&#xff0c;代替spr…

关于win11电脑连接wifi的同时,开启热点供其它设备连接

背景&#xff1a; 我想要捕获手机流量&#xff0c;需要让手机连接上电脑的热点。那么问题来了&#xff0c;我是笔记本电脑&#xff0c;只能连接wifi上网&#xff0c;此时我的笔记本电脑还能开启热点供手机连接吗&#xff1f;可以。 上述内容&#xff0c;涉及到3台设备&#x…

【OpenGL】OpenGL简介

文章目录 OpenGL概述OpenGL的本质OpenGL相关库核心库窗口管理glutfreeglutglfw 函数加载glewGLAD OpenGL概述 OpenGL(Open Graphics Library) 严格来说&#xff0c;本身并不是一个API&#xff0c;它是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了…

AI写作(十)发展趋势与展望(10/10)

一、AI 写作的崛起之势 在当今科技飞速发展的时代&#xff0c;AI 写作如同一颗耀眼的新星&#xff0c;迅速崛起并在多个领域展现出强大的力量。 随着人工智能技术的不断进步&#xff0c;AI 写作在内容创作领域发挥着越来越重要的作用。据统计&#xff0c;目前已有众多企业开始…

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

前言 本篇文章介绍的是ROS高效进阶内容&#xff0c;使用URDF 语言&#xff08;xml格式&#xff09;做一个差速轮式机器人模型&#xff0c;并使用URDF的增强版xacro&#xff0c;对机器人模型文件进行二次优化。 差速轮式机器人&#xff1a;两轮差速底盘由两个动力轮位于底盘左…

Java 网络编程(二)—— TCP流套接字编程

TCP 和 UDP 的区别 在传输层&#xff0c;TCP 协议是有连接的&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 而UDP 协议是无连接的&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 有连接和无连接的区别是在进行网络通信的时候&#xff0c;…

YOLOv8改进,YOLOv8通过RFAConv卷积创新空间注意力和标准卷积,包括RFCAConv, RFCBAMConv,二次创新C2f结构,助力涨点

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…