讨论/题目交流/洗牌算法错哪了?/
洗牌算法错哪了?
# s 表示一副扑克牌,st 表示 1~54 的一组随机数,程序要让扑克牌按这组数洗牌 K 次。
s = ['S1','S2','S3','S4','S5','S6','S7','S8','S9','S10','S11','S12','S13',\
     'H1','H2','H3','H4','H5','H6','H7','H8','H9','H10','H11','H12','H13',\
     'C1','C2','C3','C4','C5','C6','C7','C8','C9','C10','C11','C12','C13',\
     'D1','D2','D3','D4','D5','D6','D7','D8','D9','D10','D11','D12','D13',\
     'J1','J2']
st = "36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32 33 34 35 45 46 47"

# 获取洗牌 K 次
K = eval(input())
# 把 st 转换成数组
ls = list(map(eval,st.split(" ")))
# 生成一个长度为 54 的数组
ss=[]
for i in range(54):
    ss.append("0")
# 洗牌 K 次
for i in range(K):
    m=0
    for j in ls:
        # 把 s 数组元素按 ls 数组赋值到 ss 中
        ss[j-1] = s[m]
        m=m+1
    s=ss
print(" ".join(s))

# 当 K=2 时,输出中出现了两个 “H12”,问题出在哪?(我是刚准大一新生,大佬帮我一下吧。)

python代码没有缩进真的看不懂。编辑栏有添加代码的功能。具体看代码。

# s表示一副扑克牌,st表示从1~54的一组随机数,程序要让扑克牌按这组数洗牌K次。
s = ['S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13',
     'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7', 'H8', 'H9', 'H10', 'H11', 'H12', 'H13',
     'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13',
     'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13',
     'J1', 'J2']
st = "36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32 33 34 35 45 46 47"

# 获取洗牌K次
K = eval(input())
# 把st转换成数组
ls = list(map(eval, st.split(" ")))
# 生成一个长度为54的数组
ss = []
for i in range(54):
    ss.append("0")
# 洗牌K次
for i in range(K):
    m = 0
    for j in ls:
        # 把s数组元素按ls数组赋值到ss中
        ss[j - 1] = s[m]
        m = m + 1
    #s=ss只是浅拷贝,还是指向同一内存块。你应该要深拷贝吧。
    s = ss.copy()
    print(" ".join(s))

# 当K=2时,输出中出现了两个“H12”,问题出在哪?(我是刚准大一新生,大佬帮我一下吧。)

5
展开全部 2 讨论