Python 如何从def(main)调用函数:def(dot)和def(dice)?

Python 如何从def(main)调用函数:def(dot)和def(dice)?,python,function,graphics,Python,Function,Graphics,从第三个(主)函数调用前两个函数时遇到问题。我相信我有正确的编码(忽略大小和x,y坐标)来显示di的五个面,但似乎不知道如何调用函数 主要目的是显示di的五个面 def dot(c,d): #draw each dot circDot1 = Circle(Point(50, 50), 5).setFill('black') circDot1.draw(win) circDot3 = Circle(Point(50, 100), 5).setFill('black') circDot3

从第三个(主)函数调用前两个函数时遇到问题。我相信我有正确的编码(忽略大小和x,y坐标)来显示di的五个面,但似乎不知道如何调用函数

主要目的是显示di的五个面

def dot(c,d):
 #draw each dot 
 circDot1 = Circle(Point(50, 50), 5).setFill('black')
 circDot1.draw(win)
 circDot3 = Circle(Point(50, 100), 5).setFill('black')
 circDot3.draw(win)
 circDot5 = Circle(Point(100, 50), 5).setFill('black')
 circDot5.draw(win)
 circDot7 = Circle(Point(100, 100), 5).setFill('black')
 circDot7.draw(win)
 circDot4 = Circle(Point(75, 75), 5).setFill('black')
 circDot4.draw(win)

def dice(a,b):

 #build the dice
 rectDice = Rectangle(Point(115, 115), Point(275,275))
 rectDice.setFill('pink')
 rectDice.setOutline('pink')
 rectDice.draw(win)


def main():
 # Create window, call dice function
 win = GraphWin("Dice", 400, 400)
 win.setBackground("cyan")
 dice("a","b")
我认为main()函数甚至没有被调用

尝试使用以下方法:

def main():
 # Create window, call dice function
 win = GraphWin("Dice", 400, 400)
 win.setBackground("cyan")
 dice("a","b")

if __name__== "__main__":
 main()
引用:

我想您的main()函数甚至没有被调用

尝试使用以下方法:

def main():
 # Create window, call dice function
 win = GraphWin("Dice", 400, 400)
 win.setBackground("cyan")
 dice("a","b")

if __name__== "__main__":
 main()

参考资料:

有几个问题:

您不需要执行
main()
来运行程序,但可能您并没有添加这个问题


win
是局部变量,函数无权访问它们。您应该在错误消息中看到它为
NameError:name“win”未在
rectDice.draw(win)
中定义

或者您必须使用
main()中的
global
将窗口分配给全局变量

同样的问题也存在于
dot()


dot()
中,您还有其他问题。您必须在下一行中使用
setFill()

circDot1 = Circle(Point(50, 50), 5)
circDot1.setFill('black')
circDot1.draw(win)

完整代码:

from graphics import *

def dot(win, c, d):
    #draw each dot 
    circDot1 = Circle(Point(50, 50), 5)
    circDot1.setFill('black')
    circDot1.draw(win)

    circDot3 = Circle(Point(50, 100), 5)
    circDot3.setFill('black')
    circDot3.draw(win)

    circDot5 = Circle(Point(100, 50), 5)
    circDot5.setFill('black')
    circDot5.draw(win)

    circDot7 = Circle(Point(100, 100), 5)
    circDot7.setFill('black')
    circDot7.draw(win)

    circDot4 = Circle(Point(75, 75), 5)
    circDot4.setFill('black')
    circDot4.draw(win)

def dice(win, a, b):
    #build the dice
    rectDice = Rectangle(Point(115, 115), Point(275,275))
    rectDice.setFill('pink')
    rectDice.setOutline('pink')
    rectDice.draw(win)


def main():
    # Create window, call dice function
    win = GraphWin("Dice", 400, 400)
    win.setBackground("cyan")
    dice(win, "a", "b")
    dot(win, "c", "d")

main() 

问题不多:

您不需要执行
main()
来运行程序,但可能您并没有添加这个问题


win
是局部变量,函数无权访问它们。您应该在错误消息中看到它为
NameError:name“win”未在
rectDice.draw(win)
中定义

或者您必须使用
main()中的
global
将窗口分配给全局变量

同样的问题也存在于
dot()


dot()
中,您还有其他问题。您必须在下一行中使用
setFill()

circDot1 = Circle(Point(50, 50), 5)
circDot1.setFill('black')
circDot1.draw(win)

完整代码:

from graphics import *

def dot(win, c, d):
    #draw each dot 
    circDot1 = Circle(Point(50, 50), 5)
    circDot1.setFill('black')
    circDot1.draw(win)

    circDot3 = Circle(Point(50, 100), 5)
    circDot3.setFill('black')
    circDot3.draw(win)

    circDot5 = Circle(Point(100, 50), 5)
    circDot5.setFill('black')
    circDot5.draw(win)

    circDot7 = Circle(Point(100, 100), 5)
    circDot7.setFill('black')
    circDot7.draw(win)

    circDot4 = Circle(Point(75, 75), 5)
    circDot4.setFill('black')
    circDot4.draw(win)

def dice(win, a, b):
    #build the dice
    rectDice = Rectangle(Point(115, 115), Point(275,275))
    rectDice.setFill('pink')
    rectDice.setOutline('pink')
    rectDice.draw(win)


def main():
    # Create window, call dice function
    win = GraphWin("Dice", 400, 400)
    win.setBackground("cyan")
    dice(win, "a", "b")
    dot(win, "c", "d")

main() 

在函数中添加
print()
,查看它们是否被执行。在console/terminal/cmd.exe中运行时是否出现错误?始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(不是评论)。还有其他有用的信息。您是否尝试在函数中添加
.show()
?添加
print()
,以查看它们是否被执行。在console/terminal/cmd.exe中运行时是否出现错误?始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(不是评论)。还有其他有用的信息。您是否尝试添加
.show()
?感谢您的快速响应。我没有添加main(),因为系统提示我保持代码简短,只显示问题所在。保持代码简短很好,但创建最小工作代码也很好—使用
main()
import
—这样我们就可以轻松复制代码并运行它来查看问题。感谢您的快速响应。我没有添加main(),因为系统提示我保持代码简短,只显示问题所在。保持代码简短固然好,但创建最少的工作代码也很好—使用
main()
import
—这样我们就可以轻松地复制代码并运行它来查看问题。