有没有办法让一个函数从同一个变量中获得两次随机数

2024-10-01 09:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试着做一个骰子,你可以问你是否想要生成一个新的随机数(这个想法来自https://knightlab.northwestern.edu/2014/06/05/five-mini-programming-projects-for-the-python-beginner/

第一次运行正常,但不会生成新的编号,而是打印相同的编号。有办法吗

我的代码:

import random
number = random.randint(1,6)
def rollDie():
    print(number)
    answer = input("Do you want to roll the die again? Answer with Y or N")
    if answer == "Y":
        rollDie()
    elif answer == "N":
        print("bye!")

rollDie()

Tags: theanswerhttpsnumberrandom骰子编号programming
2条回答

代码的问题是number只定义了一次number是一个整数,整数是不可变的,因此除非重新定义变量,否则其值永远不会更改

为了完成掷骰子模拟,请将number = random.randint(1,6)从代码顶部重新定位到函数内部:

发件人:

import random

number = random.randint(1,6)
def rollDie():
    print(number)
    answer = input("Do you want to roll the die again? Answer with Y or N")
    if answer == "Y":
        rollDie()
    elif answer == "N":
        print("bye!")

rollDie()

致:

import random

def rollDie():
    number = random.randint(1,6)
    print(number)
    answer = input("Do you want to roll the die again? Answer with Y or N")
    if answer == "Y":
        rollDie()
    elif answer == "N":
        print("bye!")

rollDie()

从我的角度来看,更麻烦的问题是在此上下文中使用递归。在这种情况下,我经常在初级Python代码中看到它,或者将其视为一种错误处理机制,而教授新程序员是一种糟糕的模式。这应该通过一个简单的循环来处理:

import random

def rollDie():
    while True:
        number = random.randint(1, 6)
        print(number)

        answer = input("Do you want to roll the die again? Answer Y or N: ")

        if answer.upper() == 'N':
            print("Bye!")
            break

rollDie()

而不是再次递归调用rollDie()

相关问题 更多 >