0

下面是我教授做的一个函数,我们要在代码中使用这个函数:

    import os
    def rando_num(num_bytes):
        return ord(os.urandom(num_bytes))

说明说要创建一个 create_list 函数,在 create_list 中调用 rando_num,并对返回进行一些检查。我不断收到错误,出于好奇,我自己测试了 rando_num 并得到了同样的错误。

如果我调用 rando_num('5') 我会得到“'str' object cannot be mapped to an integer”

如果我调用 rando_num(5) 我得到“ord() 期望一个字符,但找到长度为 5 的字符串”

如果我尝试 rando_num('a') 我得到“'str' 对象不能被解释为整数”

我阅读了 os.urandom 和 ord,所以我对需要在函数中添加什么感到困惑。我以为 urandom 返回一个字符串,但是错误说 ord 需要一个字符。我无法更改教授的代码,那我到底要如何使用它呢?

4

1 回答 1

0

正如Python 的 os.urandom 文档所说,urandom返回“n 个随机字节的字符串”。正如Python 的 ord 文档所说,ord必须“给定一个代表一个 Unicode 字符的字符串”。

我能看到在不修改教授代码的情况下协调这两者的唯一方法是urandom只返回一个字节,Python 将其解释为带有一个 Unicode 字符的字符串。该字符将被限制为具有through的ord结果,但它会起作用。0255

因此,将您的代码设置为始终rando_num使用1. 重复调用它实际上给出了0和之间的随机数序列255,但由操作系统而不是由编程语言完成(这是需要random的)。这在我的 Python 3.7 中确实有效。

于 2018-12-01T18:51:20.347 回答