2012-09-29 51 views
0

簡單地說,我希望實現與或while循環,以下當用戶輸入是6檢測位置圖案和移位

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... 
+0

你能展示它看起來像多於3嗎?在這三個中我沒有看到具體的模式。你在尋找一個二進制'XOR','OR'還是其他的東西? – 2012-10-04 03:09:50

+0

當然,會更新問題 – brainsfrying

+0

好的,我現在看到它。這基本上是一個循環的右移。當我得到一些空閒時間來解決這個問題時,我會更新我的答案。 – 2012-10-04 16:41:18

回答

0
#!/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字符串是不可變的,列表是可變的。

​​只是簡單地設置了我們的「輸入模式」,在第一次編輯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 

這是一個有趣和有趣的問題。請享用。 :)

注意:將​​中的7更改爲另一個數字以生成其他模式。

+0

我明白你的意思,但實際上我想要的是,我打印出的第一個模式:x .... x(第一行).x..x 。 (第2行)&第二圖案xx ....(第一行)..x..x(第二行)。我錯過了比我想象的多得多? – brainsfrying

+0

我不完全明白你的意思。你可以創建一個粘貼或編輯你的原始帖子,以更好地解釋?也許每個模式有3-5行,這樣我或其他人可能會更好地理解模式? – 2012-10-01 19:57:15

+0

謝謝。請查看編輯。 – brainsfrying