簡単に言うと、ユーザー入力が 6 の場合、for または while ループを使用して次のことを実現したいと考えています。
z....z
.z..z.
..zz..
..zz..
.z..z.
z....z
zz....
..z..z
...zz.
...zz.
..z..z
zz....
.zz...
z..z..
....zz
....zz
z..z..
.zz...
簡単に言うと、ユーザー入力が 6 の場合、for または while ループを使用して次のことを実現したいと考えています。
z....z
.z..z.
..zz..
..zz..
.z..z.
z....z
zz....
..z..z
...zz.
...zz.
..z..z
zz....
.zz...
z..z..
....zz
....zz
z..z..
.zz...
#!/usr/bin/env python3
def create_pattern(pattern_size):
# Create our list that'll be storing this info
pattern = []
# first_x and last_x are "memory" so we know where to place the Xes.
first_x = 0
last_x = pattern_size - 1
# Next, create an inner list for each line
for level in range(0, pattern_size):
# start our new line
pattern.append([])
# Now place the Xes where they belong
for x in range(0, pattern_size):
if x == first_x or x == last_x:
pattern[level].append("x")
else:
pattern[level].append(".")
# Move the Xes to the new positions
first_x += 1
last_x -= 1
return pattern
# see 'help(list.pop)' and 'help(list.insert)' for more details
def right_shift(line):
buf = line.pop()
line.insert(0, buf)
return line
# This function just acts upon each line of a pattern
def shift_pattern(pattern):
for line in range(0, len(pattern)):
line = right_shift(pattern[line])
return pattern
if __name__ == "__main__":
original = create_pattern(7)
for j in range(len(original)):
if j != 0:
original = shift_pattern(original)
for i in range(len(original)):
print("".join(original[i]))
print()
この問題はかなりきれいでした。必要なのは右シフトでした。そこで私がしたことは、リストを使用してパターンを行と文字に分解することでした。もっと効率的な方法があるかもしれませんが、Python の文字列は不変であり、リストは変更可能であるため、これが最も簡単な方法のように思えました。
create_pattern()
print()
最初に編集した後に操作される「入力パターン」を設定するだけです。
私にとって最も興味深い (そして重要な) 部分はright_shift()
. 私の最初の試みは、手続き的にリストのインデックスを設定することでした。この方法は途中まで機能しましたが、エラーが発生しやすくなっています。そこで思い出しpop()
た。help(list)
リストから最後の要素を単純にポップして最初に配置し、右シフトを「偽造」できることがすぐに明らかになりました。結果?
x.....x
.x...x.
..x.x..
...x...
..x.x..
.x...x.
x.....x
xx.....
..x...x
...x.x.
....x..
...x.x.
..x...x
xx.....
.xx....
x..x...
....x.x
.....x.
....x.x
x..x...
.xx....
..xx...
.x..x..
x....x.
......x
x....x.
.x..x..
..xx...
...xx..
..x..x.
.x....x
x......
.x....x
..x..x.
...xx..
....xx.
...x..x
x.x....
.x.....
x.x....
...x..x
....xx.
.....xx
x...x..
.x.x...
..x....
.x.x...
x...x..
.....xx
これは楽しく興味深い問題でした。楽しみ。:)
注: 7create_pattern()
を別の数字に変更して、他のパターンを生成します。