问题描述
基本上,我的计划是返回带有大小随机字母的文字,即“上”或“下”。该脚本正在运行,尽管看起来很原始(我是一个初学者,并且希望您提出一些更正)。
问题是:
-
不一致。如此说来,即使它应该是“关于”或类似的东西,它也可以打印“关于”一词。
-
我想确保一行中最多UPPER或小写字母不超过3个字母。而且我不知道该怎么做。
谢谢。
#!/usr/bin/env python3
import random
message = input()
stop = ''
def mocking(message):
result = ''
for word in message:
for letter in word:
word = random.choice(random.choice(letter.upper()) + random.choice(letter.lower()))
result += word
return result
while stop != 'n':
print(mocking(message))
stop = input("Wanna more? y/n ").lower()
if stop == 'n':
break
else:
message = input()
解决方法
您需要将输入分成多个单词,确定要在单词中更改多少个位置(如果单词较短,则最少3个或更少)。
然后在单词内部生成3个唯一位置(通过random.sample)进行更改,检查是否先变高然后变低,否则变大。添加到结果列表并将单词重新组合在一起。
import random
message = "Some text to randomize"
def mocking(message):
result = []
for word in message.split():
len_word = len(word)
# get max 3 random positions
p = random.sample(range(len_word),k = min(len_word,3))
for position in p:
l = word[position]
if l.isupper():
word = word[:position] + l.lower() + word[position+1:]
else:
word = word[:position] + l.upper() + word[position+1:]
result.append(word)
return ' '.join(result)
while True:
print(mocking(message))
stop = input("Wanna more? y/n ").lower()
if stop == 'n':
break
else:
message = input()
请参见Understanding slice notation进行切片
,最多3个修改?我会喜欢这样的东西。
def mocking(message):
result = ''
randomCount = 0
for word in message:
for letter in word:
newLetter = random.choice( letter.upper() + letter.lower() )
if randomCount < 3 and newLetter != letter:
randomCount += 1
result += newLetter
else:
result += letter
randomCount = 0
return result
如果随机选择修改了字母,则将其计数。