2016-09-23 52 views
1

當我在下面的代碼中輸入3時,它完美地打印出我需要的形狀。但是當輸入大於3時,代碼似乎會中斷,如下圖所示。我想我可能只是盯着這個太長時間,找不到明顯的愚蠢錯誤。我對python有點新,所以請放輕鬆。無法弄清楚爲什麼這段代碼能夠完美地輸入3並在5中輸入。{homework}

size = int(input("Size: ")) 

def middle1(): 
    count_middle1 = 0 
    size_m1 = (size + 1) 
    mid_1 = 1 
    mid_2 = 1 
    dots_a = 2 
    bslsh = "\\" 
    fslsh = "/"  
    while (count_middle1 != size): 
     print("|"+("."*dots_a)+((fslsh+bslsh)*mid_1)+("."*size_m1)+((fslsh+bslsh)*mid_2)+("."*dots_a)+"|") 
     mid_1+=1 
     mid_2+=1   
     count_middle1+=1 
     dots_a-=1 
     size_m1-=2 
middle1() 

Input == 3

Input == 5

任何幫助將不勝感激!

+0

隨着Python27工作。我只是改變了'size = int(raw_input(「」))' –

+0

你真的應該將大小傳遞給函數/方法'def middle1(size)' –

+0

@saurabhbaid對不起,我應該指定這是在3.5中完成的。 2 –

回答

2

如果我理解正確,你想要兩棵樹相鄰。

|........./\................../\.........| 
|......../\/\................/\/\........| 
|......./\/\/\............../\/\/\.......| 
|....../\/\/\/\............/\/\/\/\......| 
|...../\/\/\/\/\........../\/\/\/\/\.....| 
|..../\/\/\/\/\/\......../\/\/\/\/\/\....| 
|.../\/\/\/\/\/\/\....../\/\/\/\/\/\/\...| 
|../\/\/\/\/\/\/\/\..../\/\/\/\/\/\/\/\..| 
|./\/\/\/\/\/\/\/\/\../\/\/\/\/\/\/\/\/\.| 
|/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\| 

有兩個問題,一個是我在評論中提到的dots_a。第二個問題是你的size_m1。試着想想你需要改變它以適用於任何size

+0

就是這樣。它總是讓我倍增。謝謝您的幫助! –

+0

不客氣。只要提示你就可以找到解決方案。不想馬上破壞它。這種方式更有價值。 – Philipp

0

我認爲這會對你有用。

def middle1(size): 
    count_middle1 = 0 
    size_m1 = (size * 2) 
    mid_1 = 1 
    mid_2 = 1 
    dots_a = int(size_m1/2) 
    bslsh = "\\" 
    fslsh = "/"  
    while (count_middle1 != size): 
     print("|"+("."*dots_a)+((fslsh+bslsh)*mid_1)+("."*size_m1)+((fslsh+bslsh)*mid_2)+("."*dots_a)+"|") 
     mid_1+=1 
     mid_2+=1   
     count_middle1+=1 
     dots_a-=1 
     size_m1-=2 
    print("\n") 

這會給你的輸出

middle1(2) 
middle1(3) 
middle1(4) 
middle1(5) 
|../\..../\..| 
|./\/\../\/\.| 


|.../\....../\...| 
|../\/\..../\/\..| 
|./\/\/\../\/\/\.| 


|..../\......../\....| 
|.../\/\....../\/\...| 
|../\/\/\..../\/\/\..| 
|./\/\/\/\../\/\/\/\.| 


|...../\........../\.....| 
|..../\/\......../\/\....| 
|.../\/\/\....../\/\/\...| 
|../\/\/\/\..../\/\/\/\..| 
|./\/\/\/\/\../\/\/\/\/\.| 
+0

@bck如果你想刪除多餘的點,你可以做 ''dots_a = int(size_m1/2) - 1' –

+0

也有效。感謝您的幫助。顯然,乘法對我來說太難理解了。 –

0

這將爲它具有兩個輸入行之有效任何輸入

size = int(input("Size: ")) 

def middle1(): 
    count_middle1 = 0 
    size_m1 = (size - 1)*2 
    mid_1 = 2 
    mid_2 = 2 
    dots_a = size-1 
    bslsh = "\\" 
    fslsh = "/" 
    while (count_middle1 < size): 
     print("|"+("."*(dots_a))+((fslsh+bslsh)*(mid_1-1))+("."*size_m1)+((fslsh+bslsh)*(mid_2-1))+("."*(dots_a))+"|") 
     mid_1+=1 
     mid_2+=1 
     count_middle1+=1 
     dots_a-=1 
     size_m1-=2 
middle1() 
+0

這正是我最終使用的。 –

相關問題