首页 > 解决方案 > 类和函数之间的变量处理

问题描述

我正在尝试运行脚本,直到随机生成的数字与线程号不匹配。我正在使用多线程。(我只是在这里复制了其中一个)。

在我将 randomnumbers() 生成器移到一个函数中之前,一切都运行良好。只要生成的数字在“runmain”函数中,就可以了。

def randomnumbers():
    guessednumber = random.randint(1,101)
    return guessednumber

def runmain(number, guessednumber):
    while guessednumber!= number:    
        randomnumbers()
        if guessednumber == number:
            print(guessednumber)
            print(number)

class myClass1(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.start()
    def run(self):
        while True:
            number = 1
            randomnumbers()
            runmain(number, guessednumber)

myClass1()

我错过了什么?

标签: pythonpython-3.xrandom

解决方案


您定义的函数randomnumbers()是一个生成器,因此它返回一个需要捕获的值(将其分配给变量或作为参数传递给函数)。

guessednumber在函数randomnumbers()中返回变量实际上并不返回该变量,而是返回其捕获的值(在这种情况下为随机整数)。

def randomnumbers():
    return random.randint(1,101)  # Just return the value immediately without assigning to a varialble since it's not needed


def runmain(number, guessednumber):
    while guessednumber!= number:
        guessednumber = randomnumbers()  # Capture the returned value from randomnumbers() into the variable in comparison (guessednumber)
    print(guessednumber)  # No need to have an "if" statement here, since while loop will automatically break when (guessednumber==randomnumbers()) condition is satisfied
    print(number)


class myClass1(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.start()
    def run(self):
        while True:
            number = 1
            runmain(number, randomnumbers())  # Passed the returned value from the function randomnumbers() as an argument in runmain()

推荐阅读