【Python CheckiO 题解】Xs and Os Referee


CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Xs and Os Referee】:井字游戏,两个玩家(X和O)轮流在 3×3 的网格上落棋,最先在任意一条直线(水平线,垂直线或对角线)上成功连接三个网格的一方获胜。在本题中,你将是这个游戏的裁判。你必须判断游戏是平局还是有人胜出,以及谁将会成为最后的赢家。如果 X 玩家获胜,返回“X”。如果 O 玩家获胜,返回“O”。如果比赛是平局,返回“D”。
在这里插入图片描述
【链接】:https://py.checkio.org/mission/x-o-referee/

【输入】:“X”,“O”在棋盘上的位置,“.”表示空格(列表)

【输出】:获胜的一方,“X”,“O”或“D”(字符串)

【范例】

checkio(["X.O","XX.","XOO"]) == "X"
checkio(["OO.","XOX","XOX"]) == "O"
checkio(["OOX","XXO","OXX"]) == "D"

解题思路

判断谁赢有 6 种情况,横着 3 种,竖着 3 种,斜着 2 种,我用了最笨的办法,直接将每颗棋子转换成列表,依次判断是否相等就行了,就是不断的用 if 语句,另外也可以分横竖和斜着两种情况来写代码,这样的话,横竖可以设置一个变量,循环 3 次,利用类似于 game_result[i][0]game_result[i][1] 来依次比较,需要特别注意的是,要排除三个空格,也就是三个相同 . 的情况

代码实现

from typing import Listdef checkio(game_result: List[str]) -> str:list2 = []for i in game_result:list2.extend(list(i))if list2[0] != '.' and (list2[0] == list2[3] == list2[6] or list2[0] == list2[4] == list2[8] or list2[0] == list2[1] == list2[2]):return list2[0]elif list2[1] != '.' and (list2[1] == list2[4] == list2[7]):return list2[1]elif list2[2] != '.' and (list2[2] == list2[4] == list2[6] or list2[2] == list2[5] == list2[8]):return list2[2]elif list2[3] != '.' and (list2[3] == list2[4] == list2[5]):return list2[3]elif list2[6] != '.' and (list2[6] == list2[7] == list2[8]):return list2[6]else:return 'D'if __name__ == '__main__':print("Example:")print(checkio(["X.O","XX.","XOO"]))# These "asserts" using only for self-checking and not necessary for auto-testingassert checkio(["X.O","XX.","XOO"]) == "X", "Xs wins"assert checkio(["OO.","XOX","XOX"]) == "O", "Os wins"assert checkio(["OOX","XXO","OXX"]) == "D", "Draw"assert checkio(["O.X","XX.","XOO"]) == "X", "Xs wins again"print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")

大神解答

大神解答 NO.1

def checkio(result):rows = resultcols = map(''.join, zip(*rows))diags = map(''.join, zip(*[(r[i], r[2 - i]) for i, r in enumerate(rows)]))lines = rows + list(cols) + list(diags)return 'X' if ('XXX' in lines) else 'O' if ('OOO' in lines) else 'D'

大神解答 NO.2

# From Daniel Dou with love...def checkio(board):# First we put everything together into a single stringx = "".join(board)# Next we outline the 8 possible winning combinations. combos = ["012", "345", "678", "036", "147", "258", "048", "246"]# We go through all the winning combos 1 by 1 to see if there are any# all Xs or all Os in the combosfor i in combos:if x[int(i[0])] == x[int(i[1])] == x[int(i[2])] and x[int(i[0])] in "XO":return x[int(i[0])]return "D" 

大神解答 NO.3

# migrated from python 2.7
def checkio(game_result):sample = "".join(game_result)data = game_result + [sample[i:9:3] for i in range(3)] + [sample[0:9:4], sample[2:8:2]]if "OOO" in data:return "O"elif "XXX" in data:return "X"else:return "D"

大神解答 NO.4

def checkio(game_result):patterns = [] + game_resultsize = len(game_result)for col in range(size):patterns.append(''.join([game_result[row][col] for row in range(size)]))patterns.append(''.join([game_result[x][x] for x in range(size)]))patterns.append(''.join([game_result[x][size - x - 1] for x in range(size)]))return 'X' if 'XXX' in patterns else 'O' if 'OOO' in patterns else 'D'

大神解答 NO.5

def checkio(game_result):result = 'D'if game_result[0][0] == game_result[1][1] == game_result[2][2] and game_result[0][0] != '.':result = game_result[0][0]return resultif game_result[2][0] == game_result[1][1] == game_result[0][2] and game_result[2][0] != '.':result = game_result[2][0]return result    for i in range(3):if game_result[i][0] == game_result[i][1] == game_result[i][2] and game_result[i][0] != '.':result = game_result[i][0]breakif game_result[0][i] == game_result[1][i] == game_result[2][i] and game_result[0][i] != '.':result = game_result[0][i]breakreturn result

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

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

相关文章

c#多线程总结(纯干货)

线程基础 创建线程 static void Main(string[] args) {Thread t new Thread(PrintNumbers);t.Start();//线程开始执行PrintNumbers();Console.ReadKey(); }static void PrintNumbers() {Console.WriteLine("Starting...");for (int i 1; i < 10; i){Console.Wr…

Hexo 博客优化之实用功能添加系列(持续更新)

2022-01-25 更新&#xff1a;博客新地址&#xff1a;https://www.itbob.cn/&#xff0c;文章距上次编辑时间较远&#xff0c;部分内容可能已经过时&#xff01; 本文将讲述一些 Hexo 博客实用功能的添加&#xff0c;本文以作者 luuman 的 spfk 主题和作者 xaoxuu 的 Material X…

【Python CheckiO 题解】The Warriors

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

【Python CheckiO 题解】Multiply (Intro)

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

关于DateTime的一点记录 ToString(yyyy-MM-dd HH:mm:ss)

DateTime dt DateTime.Now; string z dt.ToString("yyyy-MM-dd HH:mm:ss");//你知道这个是“年月日时分秒”的格式吧? string a dt.ToString("yyyy-MM-dd HH:mm:ss ms");//这个你认为一定是 毫秒的格式? string b dt.ToString("yyyy-MM-dd HH:…

SharePoint List item数量超过5000的解决办法

SharePoint一个list里面的item数量超过5000会提示“视图无法显示&#xff0c;因为超过管理员限制设定的列表视图阈值” 在CSDN里面有比较好的解决方案&#xff0c;在这里先记录下来&#xff0c;以后有用 方案一&#xff0c;定期自动归档 不用写TimerJOb&#xff0c; 可以用cont…

什么是SharePoint?

在聊SharePoint开发之前&#xff0c;有必要说下什么是SharePoint. 在我工作的过程中&#xff0c;经常遇到客户对SharePoint不太了解的情况。有客户说&#xff0c;SharePoint太烂了&#xff0c;DropBox能做到的什么什么功能&#xff0c;SharePoint竟然做不到&#xff0c;很明显…

SharePoint 2013的REST编程基础

1. SharePoint 2013对REST编程的支持 自从SharePoint2013开始&#xff0c; SharePoint开始了对REST 编程的支持&#xff0c;这样除了.NET , Silverlight&#xff0c; Powershell之外&#xff0c; 又多了一种可以和SharePoint Server进行CSOM编程的方式。那么&#xff0c;问题来…

Office Web App2013 在线查看PDF文件

经常会有客户问&#xff0c;在SharePoint中&#xff0c;如何在浏览器中查看与编辑文档&#xff0c;通常给出的解决方案是集成Office Web App。 而在实际应用过程中&#xff0c;客户通常会要求实现PDF文件在线查看&#xff0c;对于PDF文件&#xff0c;office web App微软一直没…

Office Web Apps 2013 修改Excel在线查看文件大小限制

最近搭建了一个OWA 2013环境&#xff0c;帮客户实现在线查看Excel文档&#xff0c;不过&#xff0c;使用过程中出现了错误&#xff0c;文件大小超过10MB就无法预览了&#xff0c;查了好久&#xff0c;发现需要使用PowerShell命令进行修改。 1.出现的错误的截图&#xff1a; 2.可…

Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

Azure Storage 是微软 Azure 云提供的云端存储解决方案&#xff0c;当前支持的存储类型有 Blob、Queue、File 和 Table。 笔者在《Azure Table storage 基本用法》一文中&#xff0c;介绍了 Table Storage 的基本用法&#xff0c;本文将通过 C# 代码介绍 Blob Storage 的主要使…

Azure Table storage 基本用法 -- Azure Storage 之 Table

Azure Storage 是微软 Azure 云提供的云端存储解决方案&#xff0c;当前支持的存储类型有 Blob、Queue、File 和 Table&#xff0c;其中的 Table 就是本文的主角 Azure Table storage。 Azure Table storage 是一个在云端存储结构化 NoSQL 数据的服务&#xff0c;它不仅存取速…

C# Azure 存储-Blob

1. 前言 本文是根据Azure文档与本人做了验证之后写的。 如果想下载微软官网的demo&#xff0c; 请前往github https://github.com/Azure-Samples/storage-blob-dotnet-getting-started 2. 介绍 Azure Blob是存储很大空间的服务&#xff0c;能允许存储与访问通过http或https。…

蜗牛星际ABCD款,这几款的区别你知道吗?

前言 本次文章有可能篇幅会超长&#xff0c;由于全部内容&#xff0c;可能导致万字长文&#xff0c;所以&#xff0c;本篇已经适当做了精简&#xff0c;只针对我目前拥有的蜗牛进行一些介绍&#xff0c;会附带一些教程链接。 每一个功能的实现&#xff0c;以后我都会单独写详…

蜗牛星际 --【功耗测量】

蜗牛星际b单千兆 正面 测量对象&#xff1a;蜗牛星际b单千兆 配置&#xff1a; j1900 16g 固态 4g ddr3l 内存 关机功耗 蜗牛星际待机功耗 蜗牛星际关机的情况下待机功耗为0.6w&#xff0c;一个月消耗不到两毛四分&#xff0c;一年不到三块钱。 开机功耗 未挂硬盘的情况下…

蜗牛星际:NAS从入门到放弃

预警1&#xff0c;蜗牛矿渣大批量上市是2019年3月的事情了。我写这个大概是2019年10月前后。我挑的最好的时候下手&#xff0c;C款全装只花了245包邮。现在由于市面上货量减少&#xff0c;价格上涨&#xff0c;已经没有原来那么高的性价比了。就连单卖的机箱也从原来的50包邮涨…

Dynamics 365 CRM 开发架构简介

目录 概览 名词解释连接到Dynamics 365 CRM Web APIOrganization service选择 - Web API vs. Organization service扩展服务端扩展应用端正文 Dynamics 365 CRM提供了多种编程模型&#xff0c;你可以灵活地按需选用最佳模式。 本文是对Dynamics 365 CRM编程模型的综述。 回…

Azure手把手系列 1:微软中国公有云概述

很久没有写文章了&#xff0c;主要也是疏于自己的懒惰&#xff0c;对于IT技术的放弃&#xff0c;但我相信浪子回头金不换&#xff0c;所以我又回来了。 相信现在还在泡博客的还在做IT的&#xff0c;或多或少都听过云、私有云及公有云的概念&#xff0c;那么今天给大家分享的是微…

Azure手把手系列 2:微软中国云服务介绍

在前面的文章中&#xff0c;我们已经了解到Azure有两种&#xff0c;分别是由微软直营的国际版&#xff0c;以及微软中国委托21世纪互联运营的国内版&#xff0c;两种Azure存在一定差异&#xff0c;并且数据不互通、帐号以及计费不统一。所以在选择微软公有云的时候也需要注意&a…

Azure手把手系列 3:把IT的钱花在刀刃上

对于Azure以及公有云的了解&#xff0c;可谓是永无止境的&#xff0c;用一句客户的话来说就是Azure是大海&#xff0c;只要你往前航行&#xff0c;一定能时不时的发现宝藏&#xff1b;Azure好比是一座冰山&#xff0c;当你以为你已经对Azure很熟悉了&#xff0c;其实这只是冰山…