使用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循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复的主要内容,如果未能解决你的问题,请参考以下文章