博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python(四):数字连珠2
阅读量:5247 次
发布时间:2019-06-14

本文共 4965 字,大约阅读时间需要 16 分钟。

对上次的代码作了一些修改。在码的过程中发现,最核心的部分是在横向、竖向和两个对角方向上找到5个以上相同的数字。

自己的思路是将x行y列所在的x行、y列,以及以此为交叉点的两点对角线上的数字,转化成字符串(这部分是程序中get4str()的功能),然后利用字符串相关函数进行处理(待完成)。

最新修改代码如下: 

 

1 import random        # for random.randrange()  2 import os               # for input()  3 import string        # for string.count()  4   5 ballColorNum = 7      # 7 colors  6 RowNum = 6              # chesspad have 10 rows  7 ColNum = 10             # chesspad have 10 cols  8   9 chPad = []            # save chesspad state  10 Scores = 0                # save scores  11  12 class ball(): 13     def __init__(self): 14         self.color = random.randrange(1,ballColorNum) 15         self.x = random.randrange(0,RowNum) 16         self.y = random.randrange(0,ColNum) 17  18 #--------------------------------------- 19 # initial chesspad state, all 0, COL*ROW 20 #--------------------------------------- 21 def chesspad_init(): 22     chPad = [[0 for x in range(ColNum)] for x in range(RowNum)] 23     return chPad 24 #--------------------------------------- 25 # update chesspad with a ball 26 #---------------------------------------      27 def chesspad_update(chPad, ball): 28     chPad[ball.x][ball.y] = ball.color 29     return chPad 30 #--------------------------------------- 31 # redraw chesspad  32 #--------------------------------------- 33 def chesspad_flush(chPad): 34     for i in range(len(chPad)): 35         for c in chPad[i]: 36             print('%d'%c,end=' ')                   #for win 37             #print('\33[1;%dm%d'%(30+c,c),end=' ')  #for linux 38         print('\n') 39 #--------------------------------------- 40 # count the number of unused spaces in chesspad  41 #--------------------------------------- 42 def countNull(chPad): 43     n = 0 44     for i in range(len(chPad)): 45         for j in range(len(chPad[i])): 46             if chPad[i][j] == 0: 47                 n += 1 48     return n     49 #--------------------------------------- 50 # move from x1,y1 to x2,y2 51 #--------------------------------------- 52 def move(chpad,x1,y1,x2,y2): 53     if x1 > RowNum-1 or x2 > RowNum-1 \ 54        or y2 > ColNum-1 or y1 > ColNum-1: 55         print('input error') 56  57     else: 58         chpad[x1][y1],chpad[x2][y2] = \ 59         chpad[x2][y2],chpad[x1][y1] 60  61 #--------------------------------------- 62 # calculate_Score 63 #--------------------------------------- 64 def calculate_Score(chpad): 65     pass 66  67 #--------------------------------------- 68 # find  69 #--------------------------------------- 70 def compare_str(str4dict,x,y): 71     pass 72 #--------------------------------------- 73 # generate 4 strings and return a dict: 74 # FORMART: 75 # {'RW':'...','CL':'...', 76 #  'LR':'...','RL':'...'} 77 # compare with chpad[x][y] which aspears 78 #  5 times 79 #--------------------------------------- 80 def get4str(chpad,x,y): 81      82     sx=sy=slr=srl='' 83      84     # ROW(X) 85     for c in chpad[x]: 86         sx += str(c) 87      88     # COL(Y) 89     for i in range(RowNum): 90         sy += str(chpad[i][y]) 91      92     # from left-top to right-buttom 93     for i in range(x): 94         if x-i <= 0 or y-i <= 0: 95             break 96         else: 97             slr += str(chpad[x-i-1][y-i-1]) 98     slr[::-1]  # reverse 99     100     for i in range(RowNum-x):101         if x+i >= RowNum or y+i >= ColNum:102             break103         else:104             slr += str(chpad[x+i][y+i])105     106     # from right-top to left-buttom107     for i in range(1,x):108         if x-i <= 0 or y+i >= ColNum:109             break110         else:111             srl += str(chpad[x-i][y+i])112     srl[::-1]  # reverse113     114     for i in range(RowNum-x):115         if x+i > RowNum-1 or y-i < 0:116             break117         else:118             srl += str(chpad[x+i][y-i])119     120     return {
'RW':sx,'CL':sy,'LR':slr,'RL':srl}121 122 def main():123 print('\n-------------------GAME------------------\n')124 pad = chesspad_init()125 126 while 1:127 n = 1128 while 1:129 b = ball()130 if pad[b.x][b.y] == 0:131 print('(%d,%d:%d)'%(b.x, b.y, b.color),end=' ')132 pad = chesspad_update(pad, b)133 if countNull(pad) == 0:134 print("\n\nGAME OVER!")135 exit()136 n += 1137 if n > 3:138 break139 print('\n') 140 141 chesspad_flush(pad)142 143 x1=y1=x2=y2=0 144 a = input('Move (x1,y2) to (x2,y2):').split(' ')145 x1,y1,x2,y2 = int(a[0]),int(a[1]),int(a[2]),int(a[3])146 move(pad,x1,y1,x2,y2 )147 print(get4str(pad, x2, y2))148 149 chesspad_flush(pad)150 151 if __name__=='__main__':152 main()

 

以上代码后面有修改,98行、112行本来是自己写的一个反转字符串的函数实现,后来才知道用切片str[::-1]实现更简洁。

转载于:https://www.cnblogs.com/py520ziyi/p/5579367.html

你可能感兴趣的文章
剑指Offer——机器人的运动范围
查看>>
day01_Sock Merchant
查看>>
Round B APAC Test 2017
查看>>
Office 365 系列一 ------- 如何单个安装Office 客户端和Skype for business
查看>>
MySQL 字符编码问题详细解释
查看>>
perl 学习笔记
查看>>
31 Days of Windows Phone
查看>>
poj 1184(聪明的打字员)
查看>>
Ubuntu下面安装eclipse for c++
查看>>
C#压缩或解压(rar和zip文件)
查看>>
观察者模式
查看>>
电商网站的宕机案例分析
查看>>
查看Linux端口的占用及连接情况
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
[CODEVS 3037] 线段覆盖 5
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
ppt打不出中文
查看>>
nginx修改内核参数
查看>>