侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现数独游戏 java简单实现数独游戏

Python  /  管理员 发布于 8年前   110

 使用python和java实现数独游戏,有比较才有收获哦。

1、Python版

#--coding:utf-8--import randomimport itertoolsfrom copy import deepcopydef make_board(m=3): numbers = list(range(1,m**2+1)) #可能出现的数字为1-9 board = None #board是数度二维列表 while board is None: board = get_board(m,numbers) return boarddef get_board(m,numbers): n = m**2 board = [[None for _ in range(n)] for _ in range(n)] for i,j in itertools.product(range(n),repeat=2): i0,j0 = i-i%m,j-j%m # i,j分别代表的是我们的行和列 # i0和j0代表的是board[i][j]所在的区块的起始位置 random.shuffle(numbers) #shuffle() 方法将序列的所有元素随机排序。 for x in numbers:  if(x not in board[i]   and all(row[j]!=x for row in board)   and all(x not in row[j0:j0+m]   for row in board[i0:i])):  board[i][j] = x  break else:#当循环正常结束时会执行else  return None return boarddef print_board(board,m=3): numbers = list(range(1,m**2+1)) #每一行随机把5个数字变成None omit = 5 #omit变量掌控着每一行被抹去的数字个数 challange = deepcopy(board) for i,j in itertools.product(range(omit),range(m**2)): x = random.choice(numbers) - 1 challange[x][j] = None spacer = "++-----+-----+-----++-----+-----+-----++-----+-----+-----++" print(spacer.replace('-','=')) for i,line in enumerate(challange): print("|| {} | {} | {} || {} | {} | {} || {} | {} | {} ||" .format(*(cell or ' ' for cell in line))) #format()函数中的 * 号,则是将所有的 cell 的不同值放入一个元组 tuple 之中,方便format函数调用 if(i+1)%3==0:  print(spacer.replace('-','=')) else:  print(spacer) return challangeBoard = make_board()print_board(Board)

效果:

2、Java版

package com.jimo;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Random;public class Shudu { public String[][] make_board(int m) { String[][] board = null; int n = m * m; List<Integer> numbers = new ArrayList<>(); for (int i = 1; i <= n; i++) {  numbers.add(i); } while (board == null) {  board = get_board(m, numbers); } return board; } private String[][] get_board(int m, List<Integer> numbers) { int n = m * m; String[][] board = new String[n][n]; for (int i = 0; i < n; i++) {  for (int j = 0; j < n; j++) {  boolean ok = true;  // 打乱顺序  Collections.shuffle(numbers);  for (int x = 0; x < n; x++) {   if (isOk(numbers.get(x) + "", board, i, j, m)) {   board[i][j] = numbers.get(x) + "";   ok = false;   break;   }  }  if (ok) {   return null;  }  } } return board; } public void print_board(String[][] board, int m) { int n = m * m; int hard = 5; String[][] b = new String[n][n]; System.arraycopy(board, 0, b, 0, board.length); Random rd = new Random(); for (int i = 0; i < hard; i++) {  for (int j = 0; j < n; j++) {  int x = rd.nextInt(9);  b[x][j] = null;  } } String spacer = "+-----+-----+-----+-----+-----+-----+-----+-----+-----+"; System.out.println(spacer); for (int i = 0; i < n; i++) {  for (int j = 0; j < n; j++) {  if (null == board[i][j]) {   System.out.print("| |");  } else {   System.out.print("| " + b[i][j] + " |");  }  }  System.out.println();  System.out.println(spacer); } } /** * 判断行列和9格里是否重复 *  * @param x * @param board * @return */ private boolean isOk(String x, String[][] board, int i, int j, int m) { int i0 = i - i % m, j0 = j - j % m; int n = m * m; for (int k = 0; k < n; k++) {  if (x.equals(board[i][k]) || x.equals(board[k][j])) {  return false;  } } for (int k = i0; k < i; k++) {  for (int g = j0; g < j0 + m; g++) {  if (board[k][g].equals(x)) {   return false;  }  } } return true; } public static void main(String[] args) { Shudu s = new Shudu(); int m = 3; String[][] b = s.make_board(m); for (int i = 0; i < 9; i++) {  for (int j = 0; j < 9; j++) {  System.out.print(b[i][j] + " ");  }  System.out.println(); } s.print_board(b, m); }}

效果:

3 4 7 6 5 2 8 1 9 5 9 6 8 3 1 4 2 7 2 1 8 9 7 4 5 3 6 1 3 4 7 9 5 6 8 2 7 5 2 1 8 6 9 4 3 6 8 9 4 2 3 1 7 5 4 7 5 3 1 9 2 6 8 8 2 1 5 6 7 3 9 4 9 6 3 2 4 8 7 5 1 +-----+-----+-----+-----+-----+-----+-----+-----+-----+| || || || 6 || 5 || || 8 || 1 || 9 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| 5 || 9 || 6 || || || || 4 || || 7 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| 2 || || || 9 || 7 || 4 || 5 || || 6 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| 1 || 3 || 4 || 7 || 9 || || 6 || || |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| || 5 || 2 || 1 || || || || 4 || |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| || || || || 2 || 3 || || 7 || |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| 4 || 7 || || || 1 || 9 || || 6 || 8 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| || 2 || 1 || 5 || 6 || 7 || || || 4 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+| 9 || 6 || || || || || || 5 || 1 |+-----+-----+-----+-----+-----+-----+-----+-----+-----+

可以看出java的代码量是python的两倍。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    为什么入门大数据选择Python而不是Java?
    下一条:
    Java实现的执行python脚本工具类示例【使用jython.jar】
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客