Python导入模块后while循环中程序仅执行一次的问题求助
问题原因
你的run.py存在两个核心问题:
- 导入
main模块时,main.py里的compare()会被立即执行一次,但循环中的main只是引用模块对象,不会触发函数重新运行。 - 用
while i >=1实现无限循环的写法冗余,直接用while True更简洁直观。
解决方案
方案1:修改run.py,主动调用函数
将run.py修改为以下代码,每次循环主动调用main模块里的compare()函数:
import main while True: main.compare() # 可选:添加退出机制,避免无限循环无法终止 choice = input("输入'y'继续,其他字符退出:") if choice.lower() != 'y': break
方案2:优化main.py为可复用模块(推荐)
先调整main.py,让它既可以单独运行,也能作为模块导入时不自动执行函数:
def compare(): # 注意:将输入转为数值类型,避免字符串字典序比较的错误 x = float(input("Enter the First Number: ")) y = float(input("Enter the Second Number: ")) z = float(input("Enter the Third Number: ")) numbers = [x,y,z] if numbers[0] == numbers[1]: if numbers[0] == numbers[2]: print("Numbers are Equal which is = ",numbers[0]) else: print("The Maximum number is = ",max(numbers)) print("The Minimum number is = ",min(numbers)) else: print("The Maximum number is = ",max(numbers)) print("The Minimum number is = ",min(numbers)) # 只有直接运行main.py时才执行函数 if __name__ == "__main__": compare()
再修改run.py:
import main while True: main.compare() if input("按'q'退出,其他键继续:").lower() == 'q': break
额外优化提示
原代码中input()获取的是字符串,直接用max()/min()会按字符串字典序比较(比如"10"会比"2"小),所以建议将输入转为float或int类型,确保数值比较正确。
内容的提问来源于stack exchange,提问作者Mohammed Al Yahyai
相关产品推荐
相关产品推荐

