【发布时间】:2015-06-25 01:09:02
【问题描述】:
所以我很沮丧,因为我对 Java 相当精通,所以我无法弄清楚这看似微不足道的事情,但无论如何我的 Python 入门教授给我们分配了一个实验室,我们必须在其中创建一个带有字母的模式基于行和列位置。没有循环或迭代,只有条件语句。
比如这个函数:
def letter(row, col):
if row>col:
return 'T'
else:
return 'W'
会产生:
WWWWWWWWWWWWWWWWWWWW
TWWWWWWWWWWWWWWWWWWW
TTWWWWWWWWWWWWWWWWWW
TTTWWWWWWWWWWWWWWWWW
TTTTWWWWWWWWWWWWWWWW
TTTTTWWWWWWWWWWWWWWW
TTTTTTWWWWWWWWWWWWWW
TTTTTTTWWWWWWWWWWWWW
TTTTTTTTWWWWWWWWWWWW
TTTTTTTTTWWWWWWWWWWW
TTTTTTTTTTWWWWWWWWWW
TTTTTTTTTTTWWWWWWWWW
TTTTTTTTTTTTWWWWWWWW
TTTTTTTTTTTTTWWWWWWW
TTTTTTTTTTTTTTWWWWWW
TTTTTTTTTTTTTTTWWWWW
TTTTTTTTTTTTTTTTWWWW
TTTTTTTTTTTTTTTTTWWW
TTTTTTTTTTTTTTTTTTWW
TTTTTTTTTTTTTTTTTTTW
如果遍历他的驱动文件,其中 row 和 col 都等于 20。
我坚持的是为模式创建一个函数:
XOOOOOX
OXOOOXO
OOXOXOO
OOOXOOO
OOXOXOO
OXOOOXO
XOOOOOX
请不要给我答案,而是指出我正确的方向。
到目前为止,我知道当 row==col 时,可以识别左->右对角线的 X。这是我遇到问题的右->左对角线。
非常感谢。
【问题讨论】:
-
为了做右上角 -> 左下角对角线,你需要知道宽度(或高度,因为它是方形的)。在您的示例中,它是 7。这可能足以让您入门。
-
@TigerhawkT3:它几乎必须等同于
print('\n'.join(''.join(letter(row, col) for col in range(colcount)) for row in range(rowcount)))(除了它可能会改变迭代以捕获意外或故意欺骗状态的程序......)。 -
@abarnert 我的猜测是您选择了它,所以您告诉驱动程序
rowcount/colcount,然后您根据该假设编写代码。至少这是我从“如果运行他的驱动程序文件,其中 row 和 col 都等于 20”得到的。 -
最后一件事:如果您真的更熟悉 Java,请编写一个
public static char letter(int row, int col)实现,然后尝试将其移植到 Python。作为一般规则,这是编写代码的一种不好的方式,但是当你被卡住时,它可能是一种解开卡住的方式。 (我经常用漂亮的 Python 编写 Ruby 或 JS 代码,将其移植为糟糕的 Ruby/JS,然后一旦我得到它,将其丢弃并重写为惯用的 Ruby/JS……) -
@jedwards:“你不能使用全局变量。提示:参见
inspect.getsourcefile和ast.parse”。 :)