为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中的循环外调用迭代变量

在 Python 中的循环外调用迭代变量

阿波罗的战车 2023-06-20 17:20:17
我正在制作一个简单的猜谜游戏。我在一个名为的函数中有一个变量guess_left,它预设了一个值。在 while 循环中,每当有人猜错时,该值就会减 1,直到没有更多的猜测可用并且循环中断。我如何将递减的变量从循环中取出并在该人获胜时将其作为获胜消息打印出来,如print(f"Congrats. You won with {guess_left} tries left.")Or 经过一定次数的尝试?完整代码:from random import randintdef generator():    return randint(1, 1024)def rand_guess():    random_number = generator()    guess_left = 25    flag = 0    while guess_left > 0:        guess = int(input("Please enter your lucky number: "))        if guess == random_number:            flag = 1            break        elif guess < random_number:            guess_left -= 1            print(f"Wrong Guess. Your number should be higher! You have {guess_left} tries left.")        else:            guess_left -= 1            print(f"Wrong Guess. Your number should be lower! You have {guess_left} tries left.")    if flag == 1:        return True    else:        return Falseif __name__ == '__main__':    if rand_guess() is True:        print(f"Congrats! You won.")    else:        print("Sorry, you lost the game!")
查看完整描述

4 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

有许多不同的方法可以解决这样的问题,您必须考虑它们并决定哪种方法最适合您的编程风格。

使 guess_left 成为全局变量: 从纯技术的角度来看,您可以创建guess_left一个全局变量以便在rand_guess函数外部访问它,

返回剩余的猜测数量 然而,通常最好不要创建太多全局变量,因为它会导致代码难以阅读(并且经常有错误)。您是否考虑过返回rand_guess剩余的猜测数量。

将游戏结束状态打印消息移动到 rand_guess 函数中:您还可以将游戏结束时的所有打印语句移动到函数内部 rand_guess,即您当前返回 true 或 false 的位置。

在考虑选择哪种解决方案时,请考虑以下事项:一个月后我是否仍能理解这段代码的作用?其他人能理解这段代码的作用吗?


查看完整回答
反对 回复 2023-06-20
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

这是一个从一个函数返回多个结果的例子。


    if flag == 1:

        return [True, guess_left]

    else:

        return [False, guess_left]


    if __name__ == '__main__':

        result = rand_guess()

        if result[0] is True:

            guess_left = result[1]

            print(f"Congrats. You won with {guess_left} tries left.")

        else:

            print("Sorry, you lost the game!")


查看完整回答
反对 回复 2023-06-20
?
喵喔喔

TA贡献1735条经验 获得超5个赞

好吧,定义一个全局变量是可能的,但通常被认为是糟糕的风格,因为随着项目的增长,它们往往很难跟踪。范围界定是一件美丽的事情!你为什么不尝试这样做,返回剩下的猜测次数:


def rand_guess():

    random_number = generator()


    for i in range(25, 0, -1):

        guess = int(input("Please enter your lucky number: "))

        if guess == random_number:

            return i-1

    return 0


if __name__ == '__main__':

    guesses_left = rand_guess()

    if guesses_left:

        print(f"Congrats! You won with {guesses_left} guesses left.")

    else:

        print("Sorry, you lost the game!")


查看完整回答
反对 回复 2023-06-20
?
隔江千里

TA贡献1906条经验 获得超10个赞

您可以初始化guess_left为全局变量,并在函数内部不断对其进行更新。


像这样:


from random import randint

guess_left = 25


def generator():

    return randint(1, 1024)


def rand_guess():

    random_number = generator()

    flag = 0


    global guess_left

    while guess_left > 0:

        guess = int(input("Please enter your lucky number: "))

        if guess == random_number:

            flag = 1

            break

        elif guess < random_number:

            guess_left -= 1

            print(f"Wrong Guess. Your number should be higher! You have {guess_left} tries left.")

        else:

            guess_left -= 1

            print(f"Wrong Guess. Your number should be lower! You have {guess_left} tries left.")


    if flag == 1:

        return True

    else:

        return False


if __name__ == '__main__':

    if rand_guess() is True:

        print(f"Congrats. You won with str(guess_left) tries left.")

    else:

        print("Sorry, you lost the game!")


查看完整回答
反对 回复 2023-06-20
  • 4 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信