我有一个看起来像这样的表:
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;实际上是什么时候。
答案 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