鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 2

[已解决]这段代码中,r = random.randint(0,len(target)-1)第二个参数为什么要-1?

[复制链接]
发表于 2023-9-4 21:06:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import random

def fy_shuffle(x, n=1):
    for i in range(n):
        target = list(x)
        result = []
        while target:
            r = random.randint(0,len(target)-1)
            result.append(target.pop(r))

        print(f"第{i+1}次打乱的结果:{''.join(result)}")

    return "".join(result)

x = input('请输入需要打乱的序列:')
n = int(input('请输入需要打乱的次数:'))

print(f'最终结果是:{fy_shuffle(x,n)}')

代码的目的是每次从序列里取出一个随机的元素放到新的序列里,直到原序列里所有元素都被取出来以后就完成打乱序列的任务了

我的理解是random.randint(a,b)是左闭右开区间,所以random.randint的参数中的len(target)不用-1也可以,因为不会取到len(target)
最佳答案
2023-9-4 21:06:57
在这段代码中, random.randint(a, b) 函数用于生成一个介于 a 和 b 之间的随机整数。但是,需要注意的是, b 参数是一个上限值,是不包含在生成的随机整数范围内的。

在这个代码中, r = random.randint(0, len(target)-1) 的目的是生成一个介于0和 len(target)-1 之间的随机整数。为什么要减去1呢?

这是因为在Python中,列表的索引是从0开始的。如果我们有一个长度为 n 的列表,那么它的索引范围是从0到 n-1 。所以, len(target)-1 实际上是列表 target 的最后一个元素的索引。

因此,通过 random.randint(0, len(target)-1) ,我们可以生成一个介于0和 len(target)-1 之间的随机整数,用于从列表中随机选择一个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-4 21:06:57 | 显示全部楼层    本楼为最佳答案   
在这段代码中, random.randint(a, b) 函数用于生成一个介于 a 和 b 之间的随机整数。但是,需要注意的是, b 参数是一个上限值,是不包含在生成的随机整数范围内的。

在这个代码中, r = random.randint(0, len(target)-1) 的目的是生成一个介于0和 len(target)-1 之间的随机整数。为什么要减去1呢?

这是因为在Python中,列表的索引是从0开始的。如果我们有一个长度为 n 的列表,那么它的索引范围是从0到 n-1 。所以, len(target)-1 实际上是列表 target 的最后一个元素的索引。

因此,通过 random.randint(0, len(target)-1) ,我们可以生成一个介于0和 len(target)-1 之间的随机整数,用于从列表中随机选择一个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-4 21:13:57 | 显示全部楼层
isdkz 发表于 2023-9-4 21:06
在这段代码中, random.randint(a, b) 函数用于生成一个介于 a 和 b 之间的随机整数。但是,需要注意的是, ...

为什么不能包含len(target)呢?左闭右开取不到len(target)吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表