Python 容易出错的事情

Python 容易出错的事情,python,Python,英语不是我的强项,请考虑一下 我想做的是用“~”符号做一个3x3,4x4或5x5矩阵,它会被“X”替换3次 根据x和y输入给定的坐标,附加在s=[] 例如,如果我有一个矩阵3x3 ~~~ ~~~ ~~~ 和坐标(0,0) 结果应该是: X~~ ~~~ ~~~ 虽然听起来很简单,但对我来说仍然不容易,即使我的代码看起来合乎逻辑,我也会遇到问题 > IndexError: list index out of range 这是我的代码: a = [] n=0 while n<3 o

英语不是我的强项,请考虑一下

我想做的是用“~”符号做一个3x3,4x4或5x5矩阵,它会被“X”替换3次

根据x和y输入给定的坐标,附加在s=[]

例如,如果我有一个矩阵3x3

~~~
~~~
~~~
和坐标(0,0)

结果应该是:

X~~
~~~
~~~
虽然听起来很简单,但对我来说仍然不容易,即使我的代码看起来合乎逻辑,我也会遇到问题

> IndexError: list index out of range
这是我的代码:

a = []

n=0
while n<3 or n>5:
    n=int(raw_input("type matrix: "))
for i in range (n):
    for j in range (n):
        print "~",
    print "\n",
def zdruzi(a):
    for row in a:
        print " ".join(row)
zdruzi(a)

s = []
for i in range(3):
    x=int(raw_input("x: "))
    y=int(raw_input("y: "))
    s.append(int(x))
    s.append(int(y))
    a[int(x)][int(y)]="X"

    if (x<0) or (x>(n-1)):
        print "not good"
        break

    print a
a=[]
n=0
而n5:
n=int(原始输入(“类型矩阵:”)
对于范围(n)中的i:
对于范围(n)内的j:
打印“~”,
打印“\n”,
德夫兹德鲁兹(a):
对于a中的行:
打印“”连接(行)
zdruzi(a)
s=[]
对于范围(3)中的i:
x=int(原始输入(“x:”)
y=int(原始输入(“y:”)
s、 附加(int(x))
s、 附加(int(y))
a[int(x)][int(y)]=“x”
如果(x(n-1)):
打印“不好”
打破
打印

您尚未预先填充
a
。阅读
n
后,执行以下操作:

a = [ [ '~' for _ in range(n) ] for _ in range(n) ]

您尚未预填充
a
。阅读
n
后,执行以下操作:

a = [ [ '~' for _ in range(n) ] for _ in range(n) ]

由于
x
y
是调用
int(…)
的产物,因此不需要调用
int(x)
int(y)
。直接使用
x
y
。是的,我知道了,我做了一些多余的int(…)调用。但是我用x和y直接测试了很多次,仍然得到相同的错误。冗余调用不是问题的原因。我只是指出它们作为一个注释。另外,你应该在使用之前测试
x
是否在范围内,而不是在使用之后。因为
x
y
是调用
int(…)
的产物,你不需要调用
int(x)
int(y)
。直接使用
x
y
。是的,我知道了,我做了一些多余的int(…)调用。但是我用x和y直接测试了很多次,仍然得到相同的错误。冗余调用不是问题的原因。我只是指出它们作为一个注释。另外,你应该在使用之前测试
x
是否在范围内,而不是在使用之后。是的(除了i18n blahblahblah),但是由于字符串是不可变的,所以你不需要为内部循环使用特殊的大小写。@IgnacioVazquez Abrams:你是说我应该编写
['~']*n
?我想我可以,但是上面的感觉更正常。我不是说你应该有,我只是说你可以有。嗨。这很有帮助。但我们还没有完全做到。ATM它只在A中显示“x”,对于最后一系列的x和y。我该如何做才能在我的a=[]中显示3个x?@Acadeniaan:请仔细阅读我的答案。是的(除了i18n blahblahblah),但由于字符串是不可变的,所以内部循环不需要特殊的大小写。@IgnacioVazquez Abrams:你是说我应该写
['~']*n
?我想我可以,但是上面的感觉更正常。我不是说你应该有,我只是说你可以有。嗨。这很有帮助。但我们还没有完全做到。ATM它只在A中显示“x”,对于最后一系列的x和y。我该如何做才能在我的a=[]中显示3个x?@Acadeniaan:请仔细阅读我的答案。