我是Python的新手,目前正在学习使用python程序中的函数和多个模块。
我有两个模块“Functions_Practice_Main”(运行一个菜单)和“Functions_Practice”,它有一个简单程序的代码,如果用户的输入除以7就可以解决(我知道......相当沉闷的练习)
我想要做的是让用户在菜单模块运行时输入他们的名字,然后通过程序显示来获取此全局变量,以使程序更加个性化。
但是,当我运行菜单模块时,它会要求输入两次名称。输入的第一个名称显示在“除以7”程序中,输入的第二个名称显示在菜单中。我理解为什么会发生这种情况(由于在其他代码有机会运行之前导致要求知道全局变量在Functions_Practice_Main模块中的Functions_Practice模块的导入)但我真的需要知道如何修复它。
如何在菜单模块运行时让用户输入他们的名字ONCE,然后通过程序显示来获取此全局变量,以使其对用户更加个性化。
Functions_Practice_Main
import Functions_Practice, sys
name = input("What is your name? ")
def main():
while True:
print(name, "'s Menu")
print("*******************")
print("1. Can you divide by 7?")
print("2. Quit")
print("*******************")
selection = int(input("Your number selection please..."))
if selection == 1:
Functions_Practice.main()
elif selection == 2:
sys.exit()
else:
print("Your number selection was invalid, please try again...")
if __name__ == '__main__':
main()
*的 Functions_Practice *
import Functions_Practice_Main
def inputData(name):
print(name)
number = int(input(" Please enter your number: "))
return number
def processData(number):
answer = number % 7
if answer == 0:
remainder = True
else:
remainder = False
return remainder
def outputData(remainder):
if remainder == True:
print("The number you entered doesn't have a remainder")
elif remainder == False:
print("The number you entered does have a remainder")
def main():
number = inputData(Functions_Practice_Main.name)
remainder = processData(number)
outputData(remainder)
if __name__ == '__main__':
main()
答案 0 :(得分:0)
将模块作为脚本运行并不算作将其作为模块导入。当Functions_Practice_Main.py脚本导入Functions_Practice,而Functions_Practice导入Functions_Practice_Main时,Python并不关心Functions_Practice_Main.py中的代码是否已作为主脚本运行。 Python将再次运行它以生成模块。
你如何解决这个问题?好吧,你应该做几件事。首先,尽可能避免循环进口。不使用Functions_Practice导入Functions_Practice_Main,而是将Functions_Practice需要的所有数据传递给Functions_Practice_Main作为函数参数。
在Functions_Practice_Main中:
Functions_Practice.interactive_remainder_test(name)
在Functions_Practice中:
def interactive_remainder_test(name):
number = inputData(name)
remainder = processData(number)
outputData(remainder)
其次,这样的事情:
name = input("What is your name? ")
属于文件main
,因为在导入文件时它们不应运行。