鱼C论坛

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

[已解决]Python 44讲 函数IV 动动手 0 看了小甲鱼思路,发现自己思维老是走远路

[复制链接]
发表于 2024-5-6 19:28:14 | 显示全部楼层 |阅读模式

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

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

x
Python 44讲 函数IV 动动手 0  看了小甲鱼思路,发现自己思维老是走远路
我的:
import random

def fy_shuffle(s,count):
    n = 0
    while count > n:
        r = []
        while len(s) > 0:
            k = random.randint(1,len(s))
            r.append(s[k-1])
            s = s[:k-1]+s[k:]
            
        s = "".join(r)
        n += 1
        print(f"第{n}次打乱后的结果:{s}")
        
    return s
        
s = input("请输入需要打乱的序列:")
n = int(input("请输入需要打乱的次数:"))

print(f"最终结果是:{fy_shuffle(s,n)}")

小甲鱼的:
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) # 步骤2
            result.append(target.pop(r)) # 步骤3

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

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

print(f"最终的结果是:{fy_shuffle(x, n)}")
最佳答案
2024-5-7 10:05:38
没有细看你的代码 但是每个需求的实现都是多种多样的,慢慢的积累经验吧,逐渐自己也能有清晰的思路。另外,小甲鱼的代码似乎也并不完美,多次打乱时,并没有考虑到与上次打乱结果的关联性,相当于每次打乱都是重新开始打乱,然后最后一次最为结果,实际上只打乱了一次,加一行代码,让上次打乱的输出成为下次打乱的输入会更好一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-6 19:28:26 | 显示全部楼层
你的代码中有几个问题。首先,在`r =`这一行你没有给`r`变量赋值,导致后续的代码会报错。其次,在`r.append(s)`这一行,你想要将`s`中的字符一个个加入到`r`中,但是实际上你写的是将整个`s`字符串作为一个元素添加到`r`中,所以最终结果会出错。除此之外,在你的代码中使用`+=`运算符将`s`和`r`拼接在一起,也是错误的。

小甲鱼的代码中将目标序列转换为列表,并通过两层循环将其中的元素随机打乱,逐步将打乱后的字符添加到结果列表中,然后再将结果列表合并成字符串。这样可以保证每一次打乱都是基于原始序列的,而不是基于上一次打乱后的序列。

以下是你的代码经过修改后的版本:
import random

def fy_shuffle(s, count):
    for n in range(count):
        r = []
        while s:
            k = random.randint(0, len(s)-1)
            r.append(s[k])
            s = s[:k] + s[k+1:]
        
        s = "".join(r)
        print(f"第{n+1}次打乱后的结果:{s}")
        
    return s

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

print(f"最终结果是:{fy_shuffle(s, n)}")

希望这样修改后的代码能满足你的需求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-7 10:05:38 | 显示全部楼层    本楼为最佳答案   
没有细看你的代码 但是每个需求的实现都是多种多样的,慢慢的积累经验吧,逐渐自己也能有清晰的思路。另外,小甲鱼的代码似乎也并不完美,多次打乱时,并没有考虑到与上次打乱结果的关联性,相当于每次打乱都是重新开始打乱,然后最后一次最为结果,实际上只打乱了一次,加一行代码,让上次打乱的输出成为下次打乱的输入会更好一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 04:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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