- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
第一篇帖子,是编程新手,很开心!欢迎对此职位的所有反馈以及我的问题。
我正在通过自动完成无聊的工作并攻击第5章第一个问题Chess Dictionary Validator。
在本章中,我们使用了字典值{'1h':'bking','6c':'wqueen','2g':'bbishop','5h':'bqueen','3e':'wking'}代表棋盘。编写一个名为isValidChessBoard()的函数,该函数带有一个字典参数,并根据板是否有效而返回True或False。
一个有效的董事会将只有一位黑人国王和一位白人国王。每个玩家最多只能有16个棋子,最多8个棋子,并且所有棋子必须位于从“ 1a”到“ 8h”的有效空间内;也就是说,一块不能在空间“ 9z”上。作品名称以“ w”或“ b”开头,代表白色或黑色,然后是“典当”,“骑士”,“主教”,“骗子”,“女王”或“国王”。此功能应检测错误何时导致棋盘不正确。
我的问题和代码:
通过这些for循环+多个if语句评估字典键/值是否是“最佳实践”?似乎很多代码。如果在for循环中紧随其他if语句,则更改为包含一些elif会导致问题。
第23行if i[0] == 'b':
出错,因为为空字符串值的象棋空格在i [0]处没有字符。表达/评估空值的最佳方法是什么?如果是'',我是否应该在循环中添加前导条件来评估value ==”,然后“继续”?
为什么不能将第15行折叠为11,这样我只有一个语句:if 'bking' or 'wking' not in board.values():
?如果我尝试这样做,则语句结果为True;否则,结果为True。但是字典同时包含两个值,因此它不应该求值为False并保持代码运行吗?
def isValidChessBoard(board):
while True:
blackPieces = 0
whitePieces = 0
wpawn = 0
bpawn = 0
letterAxis = ('a','b','c','d','e','f','g','h')
pieceColour = ('b','w')
pieceType = ('pawn','knight','bishop','rook','queen','king')
#one black king and one white king
if 'bking' not in board.values():
print('KingError')
return False
break
if 'wking' not in board.values():
print('KingError')
return False
break
#each player has <= 16 pieces
for i in board.values():
if i[0] == 'b':
blackPieces+=1
if i[0] == 'w':
whitePieces+=1
if whitePieces >= 17:
print('TotalPieceError')
return False
break
if blackPieces >= 17:
print('TotalPieceError')
return False
break
#each player has <= 8 pawns
for i in board.values():
if i == 'wpawn':
wpawn+=1
elif i == 'bpawn':
bpawn+=1
if wpawn or bpawn >= 9:
print('PawnError')
return False
break
#all pieces must be on valid space from '1a' to '8h'
for i in board.keys():
if int(i[0]) >= 9:
print('SpacesError')
return False
break
if i[1] not in letterAxis:
print('yAxisError')
return False
break
#piece names begin with 'w' or 'b'
for i in board.values():
if i[0] not in pieceColour:
print('WhiteOrBlackError')
return False
break
#piece names must follow with 'pawn', 'knight', 'bishop', 'rook', 'queen', 'king'
for i in board.values():
if i[1:] not in pieceType:
print('PieceTypeError')
return False
return 'This board checks out'
board = {'1a': 'bking','2a': 'bqueen','3a': 'brook','4a': 'brook',
'5a': 'bknight','6a': 'bknight','7a':'bbishop','8a': 'bbishop',
'1b': 'bpawn','2b': 'bpawn','3b': 'bpawn','4b':'bpawn',
'5b': 'bpawn','6b': 'bpawn','7b': 'bpawn','8b': 'bpawn',
'1c': 'wking','2c': 'wqueen','3c': 'wrook','4c': 'wrook',
'5c': 'wbishop','6c': 'wbishop','7c': 'wknight','8c':'wknight',
'1e': 'wpawn','2e': 'wpawn','3e': 'wpawn','4e': 'wpawn',
'5e': 'wpawn','6e': 'wpawn','7e': 'wpawn','8e': 'wpawn',
'1f': '','2f': '','3f': '','4f': '','5f': '','6f': '','7f': '','8f': '',
'1g': '','2g': '','3g': '','4g': '','5g': '','6g': '','7g': '','8g': '',
'1h': '','2h': '','3h': '','4h': '','5h': '','6h': '','7h': '','8h': '',}
print(isValidChessBoard(board))
Error:
Traceback (most recent call last):
line 23, in isValidChessBoard
if i[0] == 'b':
IndexError: string index out of range
最佳答案
由于您询问是否有其他选择,因此我提出以下内容。
脚步
定义所有棋子的集合
按类型定义有效的计件范围
数数木板上的碎片
检查件数在有效范围内
检查职位是否有效
检查件名是否有效
码
def isValidChessBoard(board):
"""Validate counts and location of pieces on board"""
# Define pieces and colors
pieces = ['king','queen','rook', 'knight','bishop','knight', 'pawn']
colors = ['b', 'w']
# Set of all chess pieces
all_pieces = set(color+piece for piece in pieces for color in colors)
# Define valid range for count of chess pieces by type (low, high) tuples
valid_counts = {'king': (1, 1),
'queen': (1, 1),
'rook': (0, 2),
'bishop': (0, 2),
'knight': (0, 2),
'pawn': (0, 8)}
# Get count of pieces on the board
piece_cnt = {}
for v in board.values():
if v in all_pieces:
piece_cnt.setdefault(v, 0)
piece_cnt[v] += 1
# Check if there are a valid number of pieces
for piece in all_pieces:
cnt = piece_cnt.get(piece, 0)
lo, hi = valid_counts[piece[1:]]
if not lo <= cnt <= hi: # Count needs to be between lo and hi
if lo != hi:
print(f"There should between {lo} and {hi} {piece} but there are {cnt}")
else:
print(f"There should be {lo} {piece} but there are {cnt})")
return False
# Check if locations are valid
for location in board.keys():
row = int(location[:1])
column = location[1:]
if not ((1 <= row <= 8) and ('a' <= column <= "h")):
print(f"Invaid to have {board[location]} at postion {location}")
return False
# Check if all pieces have valid names
for loc, piece in board.items():
if piece:
if not piece in all_pieces:
print(f"{piece} is not a valid chess piece at postion {loc}")
return False
return True
关于python - 自动化无聊的东西-第5章-国际象棋字典验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60028942/
我只想国家和资本化的值(value)。 这是我的完整代码: cities = { 'rotterdam': { 'country': 'netherlands',
想更好地了解如何比较对象类型的键。 dicOverall.exists(dic2) 返回 False,而 dicOverall.exists(dic1) 返回 True。我不太确定 .Exists 如
我是编程和 python 的新手,我不知道如何解决这个问题。 my_dict = {'tiger': ['claws', 'sharp teeth', 'four legs', 'stripes'
这个问题已经有答案了: Accessing an object property with a dynamically-computed name (19 个回答) 已关闭 8 年前。 我引用了这篇文
希望有人能帮忙。我正在使用 Python,我希望能够执行以下操作。 我有一组对象(例如形状)和一系列作用于这些对象的命令。命令的格式为命令字符串,后跟可变数量的参数,可以是字符串或整数 例如形状“矩形
我在文件中保存了一本字典。我从 python 交互式 shell 将字典加载到内存中,我的系统监视器显示 python 进程消耗了 4GB。以下命令提供以下输出: size1 = sys.getsiz
如果我运行以下代码: import json foo = [ { "name": "Bob", "occupation": "", "stand
我尝试获取列名及其索引,并将结果保存为数据框或字典: df <- data.frame(a=rnorm(10), b=rnorm(10), c=rnorm(10)) 我该怎么做?谢谢。 column
我正在尝试获取输入,如果字典 logins 有一个与我的输入匹配的键,我想返回该键的值。 logins = { 'admin':'admin', 'turtle':'password1
在 Perl 世界中有一个很棒的东西叫做 CPAN .它是开源 Perl 库的大型存储。 我使用来自 CPAN 的模块,我已经发布了 several distributions myself . 我使
这个问题已经有答案了: Is there a Python dict without values? (3 个回答) 已关闭 3 年前。 我有一个问题,我想跟踪大量值。如果我从未遇到过该值,我将执行操
想知道这是否可能。 我们有一个第 3 方库,其中包含有关用户的识别信息... 与库的主要交互是通过一个以字符串为键的 HashTable,并返回该键的信息对象图。 问题是, key 显然是区分大小写的
我是 .NET 编程的新手。对不起,如果这个问题以前被问过。 我目前正在学习 F#。 Dictionary、Hashtable 和 Map 之间有什么区别?我应该什么时候使用? 我还有一个标题中没有提
我正在尝试使用SVM进行3类分类。为此,我正在SVM培训期间准备词汇表。但是,由于我在SVM预测期间获得随机结果,因此我怀疑我的词汇创建方法中存在一些问题。我创建词汇的代码如下: //Mat trai
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
假设我有一个以下形式的嵌套字典: {'geo': {'bgcolor': 'white','lakecolor': 'white','caxis': {'gridcolor': 'white', 'l
我有一个 java 应用程序,每秒启动和停止数亿个项目(从外部脚本调用)多次。 Input: String key Output: int value 此应用程序的目的是在从未永远改变的Map(约30
我正在尝试找出字典与集合和数组相比的相对优势和功能。 我发现了一篇很棒的文章here但找不到一个简单的表格来比较所有不同的功能。 有人知道吗? 最佳答案 请参阅下表,对集合和字典进行有用的比较。 (该
我想要一个字典,它可以为字典中没有的任何键返回一个指定的值,例如: var dict = new DictWithDefValues("not specified"); dict.Add("bob78
我是 python 新手,目前仍在学习如何处理列表和字典。 我有这两个功能 def food_database(item_name, size_serv, calorie_serv, prot
我是一名优秀的程序员,十分优秀!