How to draw a checkered flag to the Python screen?

一个人想着一个人 提交于 2019-12-06 16:32:54

问题


QUESTION: Implement the following pseudocode to draw a checkered flag to the screen.

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

Please copy and paste the link see the ouput: http://www.awesomescreenshot.com/image/45977/12eaef67de44c2b291ecd47fe8d10135

I implemented the pseudocode, but I need some help. I am keep getting this error: row, col = findGrid(x) TypeError: 'int' object is not iterable

My program:

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()

回答1:


If you want to return two values, you must combine them in some way. If you do this:

return row
return col

the program will return the row and then exit the function, because that's what return does. Nothing after the first return will ever be executed. Try this instead:

return row, col

The returned value will be a tuple, which is exactly what you need to carry out row, col = findGrid(x) as appears in your main(). Instead of evaluating to a single int, findGrid(x) will instead evaluate to a tuple containing two ints, and Python can iterate over that tuple to place each value into the specified variables row and col.

The error messages generated by the Python interpreter are usually pretty informative. In this case, when it says int object is not iterable, you can bet that it tried to iterate over an int and understandably failed. All you have to do then is deduce where the erroneous statement in question is looking for an iterable, find what produces the problematic expression (findGrid(x)), and inspect whether it returns an int or an iterable.



来源:https://stackoverflow.com/questions/29505529/how-to-draw-a-checkered-flag-to-the-python-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!