将井号转换为96井p上的标识符

2024-10-02 04:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在96井组中,有8列(a,B,…)和12行(01。。。12) ; 所以盘子看起来是这样的:

A01 A02 ... A12
B01 B02 ... B12
C01 ...
...
H01 ..

目前,我已将这些车牌识别为:

^{pr2}$

如何编写一个函数wellnumber2wellidentifier将数字索引转换为顶部使用的格式?例如,well1将返回A01,well13将返回{}。在


Tags: 函数格式数字车牌b12a12c01pr2
2条回答

把艾布拉姆斯的回答再往前走几步。以下是两种方法:

  1. 适用于几乎任何尺寸的机架(行X列)
  2. 从A1、B1等样式的井位转换为数字位置和从数字位置转换。在

@staticmethod def convertNumericWellPosToA1Style(numericPos, contRows, contCols, colOrRowMajor, padWithZeros): """ Convert a numeric position to an A1 style position. Parameters numericPos : int Numeric well position to be converted. contMaxRows : int Max number of container rows. contMaxCols : int Max number of container cols. colOrRowMajor : str 'col' or 'row' for column or row major addressing. padWithZeros : bool Whether to pad the numeric portion returned, with zeros or not. i.e., A1 or A01 """ if numericPos < 1: raise ValueError("Container position value '" + str(numericPos) + "' must be 1 or greater.") if contCols < 1: raise ValueError("Container columns value '" + str(contCols) + "' must be 1 or greater.") if contRows < 1: raise ValueError("Container rows value '" + str(contRows) + "' must be 1 or greater.") if numericPos > contCols * contRows: raise ValueError("Container position value '" + str(numericPos) + "' exceeds the maximum container wells possible of '" + str(contCols * contRows) + "'.") if colOrRowMajor == "row": if padWithZeros: return 'ABCDEFGH'[(numericPos - 1) // contCols] + '%02d' % ((numericPos - 1) % contCols + 1,) else: return 'ABCDEFGH'[(numericPos - 1) // contCols] + str((numericPos - 1) % contCols + 1) elif colOrRowMajor == "col": if padWithZeros: return 'ABCDEFGH'[(numericPos - 1) % contRows] + '%02d' % (math.ceil(numericPos / contRows),) else: return 'ABCDEFGH'[(numericPos - 1) % contRows] + str(math.ceil(numericPos / contRows)) else: raise ValueError("Container traversal value '" + colOrRowMajor + "' must be 'col' or 'row'.")

@静态方法 def ConvertA1StylePositionToNumeric(A1StylePos:str,contRows:int,contCols:int,colOrRowMajor:str): #至少检查两个字符 如果len(A1StylePos)==0: raise ValueError(“无法转换空的A1样式井位置。”) 如果len(A1StylePos)==1: raise VALUERROR(“A1样式井位至少需要2个字符。”) #大写字母 A1StylePos=A1StylePos.上部() colPart=0 #获取A1型机架位置的部件 行部件=A1StylePos.上部()[0:1] 如果ord(行部件)<;65或ord(行部件)>;90: raise ValueError(“A1样式井位置的第一个字符必须是字母a-Z.”) colPartAsString=A1StylePos[1:长度(A1StylePos)] 如果colPartAsString.isdigit(): colPart=int(colPartAsString) 其他: raise ValueError(“井位第一个字符后面的字符必须是数字。”) #错误检查 如果ord(A1StylePos[0])<;65或ord(A1StylePos[0])>;90: raise ValueError(“井位的第一个字符''+A1StylePos+”'必须是字符a到Z.) 如果是contCols<;1: raise ValueError(“Container columns value'”+str(contCols)+“必须是1或更大。”) 如果控制<;1: raise ValueError(“Container rows value'”+str(contRows)+“'必须是1或更大。”) 如果控制>;26: raise ValueError(“Container rows value'”+str(contRows)+“'不得大于26。”) 如果colPart>;contCols: raise ValueError(“井位值”'+A1StylePos+“'超过了'+str(contCols)+“'.”可能的最大容器列数) 如果colPart<;1: raise ValueError(“井位值”'+A1StylePos+“'必须大于等于1。”) 如果(ord(行部件)-64)>;控制: raise ValueError(“井位值”'+A1StylePos+“'指的是超出了容器列最大值''+str(contCols)+“'.”的井) #转换 如果colOrRowMajor==“col”: return(int)(((colPart-1)*contRows)+(ord(rowPart)-64)) elif colOrRowMajor==“行”: return(int)((ord(rowPart)-65)*contCols)+colPart; 其他: raise ValueError(“Container traversal value'”+colOrRowMajor+“'必须是'col'或'row'”)

哦,当然,去把它做成1基为什么你不。。。在

'ABCDEFGH'[(num - 1) // 12] + '%02d' % ((num - 1) % 12 + 1,)

相关问题 更多 >

    热门问题