数独游戏的 Python 实现 - 2 种方法
最编程
2024-06-01 20:09:47
...
每行,列,对角线的和相等,那么和一定为15。
这里使用itertools模块中的product()方法避免多次调用for循环,提高代码可读性与效率
找出所有三个数和为15的组合。
再上一步的基础上,找出使每行、每列、对角线和相等的所有组合。
通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。
代码清单 1
from itertools import product lst = range(1,10) arr = [] for n1,n2,n3 in product(lst,lst,lst): if n1+n2+n3 == 15 and len({n1,n2,n3})==3: arr.append([n1,n2,,n3]) print(arr) from itertools import product for a, b, C in product(arr,arr,arr): if len(set(a+b+c))==9: sum1 = a[0]+b[0]+0q0]#第一列求和 sum2 = a[1]+b[1]+c[1]#第二列求和 sum3 = a[2]+b[2]+c[2]#第三列求和 sum4 = a[0]+b[1]+c[2]#对角线求和 sum5 = a[2]+b[1]+c[0]#对角线求和 if sum1 == sum2 == sum3== sum4 == sum5: print(a,end ='\t') print(b,end ='\t') print(c,end ='\t') |
上一篇: leetcode-对角线遍历 II
下一篇: 三步轻松实现活商务
推荐阅读
-
Java 使用定时任务 - 前言:Java 开发过程中经常会遇到使用定时任务的情况,如在某个活动结束时自动生成获奖者名单、导出 excel 等。常见的有以下四种方式:Timer、ScheduledExecutorService、SpringTask、Quartz。 实现 Java 定时任务的四种方法 (1) JDK 自带定时器实现 (2) Spring Task @Scheduled 注解任务调度 (3) Quartz 定时器实现 (4) Elastic-job 分布式任务调度框架 JDK 自带 .NET Framework 2.0JDK 自带 Timer 和 JDK1.5 + 新 ScheduledExecutorService; Spring3.0自带的任务调度工具:它可以看做是一个轻量级的Quartz,而且使用起来比Quartz简单得多,一般可以直接用@Scheduled+corn表达式来注解实现; Quartz:简单但功能强大的 JAVA 作业调度框架; Elastic-job分布式作业调度框架:是当当网架构师基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的缺点。 JDK自带的java.util. JDK 自带的 java.util.Import 是 JDK 的一部分。 java.util.import import java.util. import java.util. public class Test { /** * 第一个方法:设置在指定时间执行指定任务,只执行一次 * schedule(TimerTask task, Date time) */ public static void timer1 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date + "\t "+"--specify the task to be run---"); } }, new Date(System.currentTimeMillis + 2000)); } } } /** * 第二个方法:设置指定任务在延迟后执行,只执行一次 * schedule(TimerTask task, long delay) * 延迟单位毫秒 */ public static void timer2{ Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 2000); } /** * 第三个方法:设置指定的任务在指定的延迟时间后周期性执行,周期时间为 period * schedule(TimerTask task, long delay, long period) * scheduleAtFixedRate(TimerTask task, long delay, long period) * 延迟,周期以毫秒为单位 */ public static void timer3 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 1000, 1000); } /** * 第四种方法:设置指定任务 task 在指定时间 firstTime 开始重复循环执行,循环时间为周期 * schedule(TimerTask task, Date firstTime, long period) * scheduleAtFixedRate(TimerTask task, Date firstTime, long period) * 以毫秒为单位的周期 */ public static void timer4 { Calendar calendar = Calendar.getInstance; calendar.set(Calendar.HOTIME) */ calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时间 calendar.set(Calendar.MINUTE, 0); // 控制分钟数 calendar.set(Calendar.SECOND, 0); // 控制秒数 Date time = calendar.getTime; // 推导出执行任务的时间,本例中为今天 12:00:00。 Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date +"\t "+"--- 指定要执行的任务 ---"); } }, time, 1000); } /** * schedule 方法和 scheduleAtFixedRate 方法的区别: * (1) schedule 方法:如果第一次执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下一次执行时间点 = 上次程序执行完成时间点 + 间隔时间 * (2) scheduleAtFixedRate 方法:如果第一次执行时间延迟,则根据上次开始时间点计算后续执行时间,即:下次执行时间点=上次程序执行时间点+间隔时间,*且前一个任务的执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下次执行时间点=上次程序执行完成时间点+间隔时间。 *而上一个任务的执行时间大于间隔时间,就会与当前任务重叠,TimerTask 在执行时需要考虑线程同步的问题 */ } 计时器的缺陷:
-
在 Python 中实现二进制查询的 2 种方法?
-
数独游戏的 Python 实现 - 2 种方法
-
python 数独游戏的简单实现
-
数独游戏的 C 语言实现
-
九宫格数独游戏的 Python 实现
-
如何实现 Python 由 1、2、3 和 4 个数字组成的不重复的三位数有多少种?有多少个?操作步骤