2015-04-08 55 views
-5

問題:執行以下僞代碼在屏幕上繪製方格標誌。如何在Python屏幕上繪製方格旗?

1. Ask the user for the size of the checkered flag (n). 
2. Draw an n x n grid to the screen. 
3. For i = 0,2,4,...,62: 
4.  row = i // n 
5.  offset = row % 2 
6.  col = (i % n) + offset 

請複製並粘貼鏈接看到輸出中:http://www.awesomescreenshot.com/image/45977/12eaef67de44c2b291ecd47fe8d10135

我實現了僞代碼,但我需要一些幫助。我不斷收到此錯誤:row, col = findGrid(x) TypeError: 'int' object is not iterable

我的程序:

from turtle import* 

def size(): 
    size = eval(input("Please enter the size of the checkered flag: ")) 
    return size 

def draw(n): 
    wn = Screen() 
    wn.setworldcoordinates(-1,-1,10,10) 
    pen = Turtle() 
    for i in range(0,n+1): 
    pen.up() 
    pen.goto(0,i) 
    pen.down() 
    pen.forward(n) 

    pen.left(90) 
    for i in range(0,n+1): 
    pen.up() 
    pen.goto(i,0) 
    pen.down() 
    pen.forward(n) 

def findGrid(n): 
    for i in range(0,63): 
    row = i // n 
    offset = row % 2 
    col = (i % n) + offset 

    return row 
    return col 

def fillSquare(x,y): 
    pen = Turtle() 
    pen.hideturtle() 
    pen.speed(10) 
    pen.up() 
    pen.goto(x,y) 
    pen.fillcolor("black") 
    pen.begin_fill() 

def main(): 
    x = size() 
    y = draw(x) 
    row, col = findGrid(x) 
    f = fillSquare(row, col) 

main() 

回答

2

如果你想return兩個值,你必須以某種方式將它們組合。如果你這樣做:

return row 
return col 

程序將returnrow然後退出功能,因爲這是return一樣。第一個return將永遠不會執行後沒有什麼。試試這個:

return row, col 

的返回值將是一個tuple,這是你需要進行row, col = findGrid(x)如出現在main()什麼。而不是評估到一個int,findGrid(x)將改爲tuple包含兩個ints和Python可以遍歷該tuple將每個值放入指定的變量rowcol

由Python解釋器生成的錯誤消息通常非常豐富。在這種情況下,當它表示int object is not iterable時,可以打賭它試圖迭代int,並且可以理解爲失敗。那麼你所要做的就是推導出錯誤的語句正在尋找一個可迭代的地方,找到產生有問題的表達式(findGrid(x)),並檢查它是否返回int或可迭代。