0

我需要编写一个函数来读取文件并在一个单元格中列出游戏的每个级别。每个单元格都包含该级别的行作为字符串,并且每一行都是单元格的一个元素。最后的单元格应该没有出现在级别之前的数字或单词,并且没有“\n”或空单元格。我实现了这个功能,但对于看起来像这样的关卡,它并不能很好地工作。有人知道吗?

文件级别

; 1

####
# .#
#  ###
#*@  #
#  $ #
#  ###
####

作为列表中的单元格:

['####', '# .#', '#  ###', '#*@  #', '#  $ #', '#  ###', '####']

我遇到问题的级别示例:

; 154 'Take the long way home.'

 ############################
 #                          #
 # ######################## #
 # #                      # #
 # # #################### # #
 # # #                  # # #
 # # # ################ # # #
 # # # #              # # # #
 # # # # ############ # # # #
 # # # # #            # # # #
 # # # # # ############ # # #
 # # # # #              # # #
 # # # # ################ # #
 # # # #                  # #
##$# # #################### #
#. @ #                      #
#############################

看起来像这样:

["54 'Take the long way home.'", '', ' ############################', ' #                          #', ' # ######################## #', ' # #                      # #', ' # # #################### # #', ' # # #                  # # #', ' # # # ################ # # #', ' # # # #              # # # #', ' # # # # ############ # # # #', ' # # # # #            # # # #', ' # # # # # ############ # # #', ' # # # # #              # # #', ' # # # # ################ # #', ' # # # #                  # #', '##$# # #################### #', '#. @ #                      #', '#############################']

我的代码:

def loader(filename):

    tmp=[]
    levels=[]
    f=open(filename, "r")
    f=f.read().split(';')
    for line in f:
        tmp.append(line[2:].strip())
    tmp.remove("")
    for i in tmp:
        i=i.split("\n")
        levels.append(i)
    print levels
4

2 回答 2

0

很难准确地遵循您要完成的任务,但我认为此功能将为您提供所需的内容。

def loader(filename):
    f = open(filename, 'r')
    lines = f.read().split('\n')
    header = lines[0] # don't know if you need this
    level = lines[2:]
    f.close()
    return level

编辑:哦,我没有意识到每个文件有多个级别。

那么这个怎么样:

def loader(filename):
    f = open(filename, 'r')
    levels = f.read().split(';')[1:]
    return [level.strip().split('\n')[2:] for level in levels]
于 2012-12-26T21:25:59.550 回答
0
def loader(filename):

    tmp=[]
    levels=[]
    f=open(filename, "r")
    f=f.read().split(';')
    for i in f[1:]:
        i=i.split("\n")
        levels.append(i[2:-1])
    print levels

对我来说很好:

测试输入.txt:

; 1

####
# .#
#  ###
#*@  #
#  $ #
#  ###
####
; 154 'Take the long way home.'

 ############################
 #                          #
 # ######################## #
 # #                      # #
 # # #################### # #
 # # #                  # # #
 # # # ################ # # #
 # # # #              # # # #
 # # # # ############ # # # #
 # # # # #            # # # #
 # # # # # ############ # # #
 # # # # #              # # #
 # # # # ################ # #
 # # # #                  # #
##$# # #################### #
#. @ #                      #
#############################

输出:

[['####', '# .#', '#  ###', '#*@  #', '#  $ #', '#  ###', '####'], [' ############################', ' #                          #', ' # ######################## #', ' # #                      # #', ' # # #################### # #', ' # # #                  # # #', ' # # # ################ # # #', ' # # # #              # # # #', ' # # # # ############ # # # #', ' # # # # #            # # # #', ' # # # # # ############ # # #', ' # # # # #              # # #', ' # # # # ################ # #', ' # # # #                  # #', '##$# # #################### #', '#. @ #                      #', '#############################']]
于 2012-12-26T21:38:25.457 回答