我正在创建一个程序,该程序读取一个txt文件,该文件的格式在下面超过1000行,并将数据存储在两个独立的二维数组中:
b14 b15 b12 y4:y11 r7 y1 b2
r15 y13 y12 b14:g9 r2 b8 b7
该文件存储一个游戏的结果,其中有两个玩家,他们都从一个袋子中选择了四个令牌。上面可以看到的一个例子是'b15‘,这意味着它是蓝色的,上面有数字15。冒号表示此后的令牌是为第二名玩家准备的。
每一行都是一场游戏。我需要将每个标记的颜色和数量存储到有4行2列的二维数组中,我为每个玩家准备了一个。
player1[0][0] = 'b'
player1[0][1] = 14
player1[1][0] = 'b'
player1[1][1] = 15
这将为player 1存储前两个令牌,在为单个游戏(文本文件中的单行)将剩余的令牌和第二名玩家存储在单独的二维数组中之后,我将处理数据,然后为文本文件中的下一行(游戏)再次覆盖数组。
我的主要问题是如何做到以下几点:
谢谢你的阅读,我很乐意回答任何问题,以进一步澄清。
发布于 2016-10-22 06:01:51
如果您已经从文本文件中读取了您的移动,您可以使用拆分函数和列表切片(Explain Python's slice notation)来处理它们。
>>> mystring = 'b14 b15 b12 y4:y11 r7 y1 b2'
在冒号处拆分以获取第1名玩家/支付方2的移动:
>>> player1, player2 = mystring.split(':')
对于每个玩家,在空格处进行分割以获得移动:
>>> player1_moves = player1.split(' ')
>>> player1_moves
['b14', 'b15', 'b12', 'y4']
如果您知道移动的第一部分始终是一个字母,则可以“分割”字符串的第一部分:
>>> player1_moves[0][:1]
'b'
>>> player1_moves[0][1:]
'14'
发布于 2016-10-22 06:40:16
您可以使用正则表达式来拆分字母和数字,使用str.split()来拆分2个玩家的结果
import re
for line in file(yourfilename):
line = line.strip()
if line != '':#not white space
results = line.split(':')#results[0] is the first man's result,results[1] is the second man's result
result1 = results[0].split(' ')
player1 = []
for i in range(4):
grade = re.findall(r'([a-z]+)([0-9]+)', result1[i])
player1.append([grade[0][0],grade[0][1]])#Split the letter and number
#player2 is the same as player1
发布于 2016-10-22 06:56:32
使用以下方法(关键函数是re.match
和str.split
):
import re
# str represents the line form text file
str = 'b14 b15 b12 y4:y11 r7 y1 b2'
player1, player2 = [[list(re.match('^([a-z])(\d+)$', i).groups()) for i in player.split(' ')]
for player in str.split(':')
]
print(player1, player2, sep='\n')
产出:
[['b', '14'], ['b', '15'], ['b', '12'], ['y', '4']]
[['y', '11'], ['r', '7'], ['y', '1'], ['b', '2']]
https://stackoverflow.com/questions/40192732
复制相似问题