使用Python for循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复

Posted

技术标签:

【中文标题】使用Python for循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复【英文标题】:Using Pyhton for loop, how can I take a letter from a string every time without any repeatation 【发布时间】:2020-09-24 12:18:58 【问题描述】:

''' 创建一个字符串的随机字谜。 使用choice方法创建一个字符串的5个随机字谜。

预期结果:由 'CREATE' 的每个字符组成的字谜。

Output : 
Anagram# 1: taeecr 
Anagram# 2: aaaete 
Anagram# 3: acteet 
Anagram# 4: rcrcee
Anagram# 5: aeerca

'''

from random import choice
Orig = 'create'
OrigL = list(Orig)
AnagL = []
for a in range(5):
    AnagL = []
    for i in range(len(Orig)):

        p = choice(OrigL)
        AnagL.append(p)
    Anag = ''.join(AnagL)
    print('Orig#',a+1,Orig)
    print('Anag#',a+1,Anag,'\n')

【问题讨论】:

【参考方案1】:

尝试以下类似的方法,不带random.choice

    将字符串转换为list 随机播放列表 重新加入列表

这样:

from random import shuffle
word = list('create')

for i in range(5):
    shuffle(word)
    print("Anagram #: ".format(i+1, "".join(word)))

Anagram #1: aeetrc
Anagram #2: rcteea
Anagram #3: eertca
Anagram #4: tceear
Anagram #5: erecat

使用random.choice

    将原始字符串转换为list 使用random.choice 从列表中获取随机索引 弹出该索引并保存字符 重复步骤 2-3,直到列表为空 重复步骤 1-4,直到你有 5 个字谜

【讨论】:

问题的措辞明确要求使用choice 方法。 @AmitaIrron 这让我觉得这是为了做作业。我提供了一个替代解决方案,以及使用choice 实现的伪代码。 这是作业,OP的代码实际上几乎是正确的。唯一剩下要做的就是弹出选择的字母。此外,不需要将原始字符串转换为列表。 choice 将从字符串中选择一个字符,s.replace(c, "", 1) 可用于弹出。 @AmitaIrron 太棒了,考虑点击下面的“发布您的答案”按钮。 谢谢你,@AmitaIrron。我现在明白了。顺便说一句,它不适合做作业。我正在尝试从 Heinhold 的书中学习 pyhton。 :)【参考方案2】:
from random import choice



Orig = 'create'
OrigL = list(Orig)
AnagL = []

for a in range(5):
    AnagL = []
    notAnal=Orig
    for i in range(len(notAnal)):
        p = choice(notAnal)
        notAnal=notAnal.replace(p,'',1)
        AnagL.append(p)
    Anag = ''.join(AnagL)
    print('Orig#',a+1,Orig)
    print('Anag#',a+1,Anag,'\n')

【讨论】:

顺便说一句,你提到了 p = choice(notAnal) 但是选择只适用于列表。 此代码适用于 python 3.8。这是结果 25 - 4 30 - 2 31 - 3 33 - 1 38 - 0

以上是关于使用Python for循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能增加一个字符?

node +express, js的for循环里有mysql查询,怎样才能先执行查询,再执行后面的代码

我怎样才能为这个matlab“for循环”做矢量化?

我怎样才能把它压缩成一个 For 循环?

For 循环中的 Matplotlib 图例

我怎样才能将它从一张桌子存储到另一张桌子?