繁体   English   中英

Python RNG和计数器

[英]Python RNG and counter

我在要求我做如下作业的家庭作业上遇到了麻烦。 编写执行以下操作的代码:

  1. 定义一个 function,返回 1 到 10 之间的 integer。

  2. 调用定义的function得到随机的integer。

  3. 继续随机抽取 integer,直到得到一个大于或等于 8 的数字。

  4. 显示在您停止之前进行了多少次抽奖

您应该导入随机模块。

我欢迎完成这项任务,但也非常感谢您的解释。 我目前不知道如何跟踪我停下来之前抽了多少次。 目前我的情况如下,请帮忙?

from random import randint
rng= randint(1,11)
def random_number_generator():
    print(rng)
    while rng<=7: 
        break
random_number_generator()
from random import randint  
rng = randint(1, 11)  # get a random number between 1 and 11

def random_number_generator():  # define a function
    print(rng)  # print random generated number
    while rng <= 7:  # if rng <= 7 condition is True
        break  # break out of while loop immediately
    # no return statement, so random_number_generator returns none

random_number_generator()  # Call function

根据您提供的代码,让我们看看您需要解决的 4 个任务。

  1. 定义一个 function,返回 1 到 10 之间的 integer。

如您所知,您可以使用关键字def定义 function。 因此,您的 function header def random_number_generator()定义了一个名为random_number_generator的 function,在调用 function 时不使用 arguments,因此空括号()

在 Python 中,每 function 默认返回None 如果你想改变这种行为,你必须在你的 function 中添加一个return语句。

def get_two():
    return 2

x = get_two()  # store return value in variable x
print(x)  # prints 2

get_two在调用时返回数字2

  1. 调用定义的function得到随机的integer。

您从random模块正确导入了randint以生成一个介于110之间的随机 integer。 但是您必须小心选择数字,因为randint包含这两个值。 那就是randint(1, 11)会给你一个随机的 integer 在 1 和 11 之间。

  1. 继续随机抽取 integer,直到得到一个大于或等于 8 的数字。

Continue drawing在这个上下文中意味着一遍又一遍地调用random_number_generator function 直到你得到一个大于或等于 8的数字。

您对具有给定条件的while循环的想法是正确的。 但是考虑一下位置。 在每次调用仅生成 1 个随机数的 function 中设置循环是否有意义?

  1. 显示在您停止之前进行了多少次抽奖

使用print function 显示您抽了多少次。 为了获得绘制次数,您可以添加一个counter变量,该变量会随着每个循环而递增。 在每个循环中,您将 1 添加到counter变量。 有 2 个选项供您执行此操作:

  1. counter = counter + 1这可能是少数
  2. 这就是为什么有一个counter += 1的简写,它与 1 相同。但您不需要写counter两次。

有了它,您可以像这样构建一个简单的计数器:

counter = 0
i = 10
while i > 3:
    counter += 1  # Increment counter by 1 each loop
    i -= 2  # Decrement i by 2 each loop
print(counter)  # prints 4

话虽如此,您现在可以开始实施给定的任务。

  1. random模块导入randint
  2. 定义一个 function 返回1到 10 之间的随机数
  3. 重复生成随机数,直到大于等于8
  4. 计算在循环终止之前花费了多少次绘制。
from random import randint  # 1. 

def random_number_generator():  # 2.
    return randint(1, 10)

counter = 0  # Initialize counter with 0

while random_number_generator() < 8:  # Draw a number until number is >= 8
    counter += 1  # increment counter to count draws
print(counter, "draw(s) needed until a number greater than or equal 8 was drawn")  # Display draws needed

由于不需要存储随机生成的数字,因此可以在循环条件中使用random_number_generator的 function 调用来检查数字是否大于或等于 8。

在循环中,您只需计算需要绘制数字的次数。

但是您可以自由地将值存储在变量rng中以检查循环条件。 在这种情况下,您需要将random_number_generator()分配给rng两次。 第一次在 while 循环之外为循环条件初始化变量rng ,第二次在循环内更改rng持有的值。

请参阅下面代码中的注释。

'''
Generate random integers until a value equal or greater than 8 is returned.
Report how many attempts it took.
''' 
from random import randint

# Define a function which ONLY returns a random integer between 1 and 10 

def rand_int():
    return (randint(1,10)) # parameters are inclusive, i.e. can return both 1 and 10

# Set initial values for a counter and the random integer result

counter = 0
random = 0

while random <= 7: # Continue running while random int is too low
    counter += 1 #Increment counter variable by 1 each loop
    random = rand_int()
    print('Current count is ', counter, ', integer is ', random)
    if counter > 100:
        print('Too many tries, something has probably gone wrong')
        break

# Display success message

print('Success! Integer ', random, ' returned after ', counter, 'attempts!')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM