在python中,我如何将用户输入链接到列表中的索引?

时间:2014-11-27 11:02:57

标签: python python-3.x indexing

我想用python创建一个二进制拼图。 目前我已经制作了6x6,8x8和10x10布局,根据玩家希望玩的难度进行展示。拼图的目的可以与数独游戏进行比较,您希望玩家在给定位置输入0或1。您将在下面找到我目前的布局。

if graad  == 1:
    easy = [['A', 'B', 'C', 'D', 'E'],
     ['_','_','_','_','_','_','_'],
     [0,1,0,1,0,1,' |1'],
     [1,0,1,0,1,0,' |2'],
     [0,1,0,1,0,1,' |3'],
     [1,0,1,0,1,0,' |4'],
     [0,1,0,1,0,1,' |5'],
     [1,0,1,0,1,0,' |6']]
    i = 0
    while i < len(easy):
        j = 0
        s = ""
        while j < len(easy[i]):
            s = s + str(easy[i][j]) + " "
            j = j + 1
        print (s)
        i = i + 1

现在我面临的问题是,如果玩家填写C列第3位和第5行填0,我怎么能让python知道呢? 我正在考虑一个IF语句来检查A,B,CD,E ......行1,2,3,4,5 ..的输入,但这将是很多if语句。

Edit1:好的,以便澄清。我想发布一张图片但需要更多帖子。 例如,我有一个6x6单元的游戏板。其中一些填充了1,其中一些填充为0,其中大多数都是空的,因为目标是让它看起来像我在python代码中的布局一样。(这就是解决方案)。所以你希望用户填写那些空单元格。 现在,让我们说玩家希望用1填充A-1,python如何知道输入A-1链接到列表中的索引[0] [0]?

2 个答案:

答案 0 :(得分:0)

将字母索引转换为数字的简单方法是使用ord()函数,该函数返回单个字符的数字代码。由于您使用的是大写字母,因此使用&#39; A&#39;作为索引为0的列的标签,您可以

column = ord(letter) - ord('A')

这将转换&#39; A&#39;到0,&#39; B&#39;等1,等等。


这是一个简短的示例程序,模糊地基于您问题的代码。

它接受A10形式的移动,将位置A1设置为&#39; 1&#39;,&#39; B30&#39;将位置B3设置为&#39; 0&#39;。它也接受小写字母,因此&#39; d11&#39;与&#39; D11&#39;相同。按Ctrl-C退出。

在Python 2.6.6上测试,但它应该在Python 3上正常工作。(要在Python 2上运行它,将input()更改为raw_input())。

#! /usr/bin/env python

def print_grid(g):
    gsize = len(g)
    base = ord('A')
    print(' '.join([chr(base + i) for i in range(gsize)]))
    print((gsize * 2) * '-')
    for i, row in enumerate(g, 1):
        print(' '.join(row) + ' | ' + str(i))
    print('\n')


def main():
    gsize = 9
    rowstr = gsize * '_'
    grid = [list(rowstr) for i in range(gsize)]
    print_grid(grid)

    while True:
        move = input('Enter move: ')
        letter, number, bit = move.strip()
        col = ord(letter.upper()) - ord('A')
        row = int(number) - 1

        grid[row][col] = bit
        print_grid(grid)


if __name__ == "__main__":
    main()

答案 1 :(得分:0)

如果您使用pandas DataFrame来保存游戏的正确答案,您可以轻松查看内容。 pandas包有一个很好的文档(在stackoverflow上有很多Q&amp; A)。

正确答案的设置:

import pandas as pd
data = [[0,1,0,1,0,1],
        [1,0,1,0,1,0],
        [0,1,0,1,0,1],
        [1,0,1,0,1,0],
        [0,1,0,1,0,1],
        [1,0,1,0,1,0]]     
easy = pd.DataFrame(data)
easy.columns = ['A','B','C','D','E','F']
print easy

位置'A',0的项目(python从0开始编号)由easy['A'][0]给出。有关为pandas DataFrame对象编制索引的详细信息,请访问the documentation

另一个有用的东西,DataFrame对象是可打印的,因此不必自己编写print命令。


如果使用DataFrames对你来说太过分了,另一个选择是使用&#39;翻译&#39;字典。该字典将使用键的字母和相应的列号作为值。

>>> column = {'A':0, 'B':1, 'C':2, 'D':3, 'E':4, 'F':5}
>>> print column['A']
0