Python:未达到嵌套循环

时间:2015-11-30 11:48:31

标签: python python-2.7 loops

我有一个看起来像这样的表:

table = [[0, 11, 12],
         [21, 'a', 'b'],
         [22, 'c', 'd']]

我的程序应该得到一个输入,如2211,找到基于前两个数字(22)的行和基于接下来的两个数字(11)的列,并获取行和列的交集中的元素。在这种情况下,它会输出' c。另一个例子是输入:21112212并输出:' a' ' d'

我试着这样做:

code = str(raw_input('Input code: '))

我假设输入格式正确(数字字符串,长度可被4整除)

result = ''
n = 0

我使用了n,因为用户可能希望从表中获得多个元素。

for a in range(1, len(code)/4 + 1):

每组四个数字的循环。

    x = 0
    y = 0
    for i in range(1, 3):
        if table[i][0] == code[(0+n):(2+n)]:
            x = i

检查表中是否存在前两个数字(例如22)。如果他们这样做我将x设置为i。我试着把打印表[i] [0]放在这里,看看这是不是问题,它没有打印任何东西,但我不知道为什么。

    for j in range(1, 3):
        if table[0][j] == code[(2+n):(4+n)]:
            y = j

与上一节相同,仅适用于该列。

    n += 4

将n递增4以获得下一个元素(如果有的话)。

    if x != 0 and y != 0:
        result += table[x][y] + ' '
    else:
        print 'Not in table'

print result

因此,如果在表中找到22和11,它将从第一个中获取行号,从第二个中获取列号,并将相应的元素添加到结果中。

因此对于输入2211而不是打印' c'它打印'不在表格中#39;实际上是什么时候。

1 个答案:

答案 0 :(得分:1)

这是一个类型问题。

您的表格定义如下:

<android.support.design.widget.TextInputLayout
    android:id="@+id/layoutCurrentPW"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    app:errorEnabled="true">

        <EditText
            android:id="@+id/editTextCurrentPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:gravity="center"
            android:hint="@string/current_password"
            android:inputType="textPassword"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@color/black" />
    </android.support.design.widget.TextInputLayout>

请注意,您的密钥是整数,而不是字符串。在循环中,您将它们分别与table = [[0, 11, 12], [21, 'a', 'b'], [22, 'c', 'd']] code[(0+n):(2+n)]进行比较 - 这些是字符串

您可以直接将密钥转换为字符串

code[(2+n):(4+n)]

或者您可以动态地将密钥转换为字符串,例如

table = [['0', '11', '12'],
         ['21', 'a', 'b'],
         ['22', 'c', 'd']]

或者您将从用户读取的键动态转换为整数(注意这会带来相当大的灵活性)

for i in range(1, 3):
    if str(table[i][0]) == code[(0+n):(2+n)]:
        x = i