如何在一个单词中选择2个或更多字母?

问题描述

基本上,我的计划是返回带有大小随机字母的文字,即“上”或“下”。该脚本正在运行,尽管看起来很原始(我是一个初学者,并且希望您提出一些更正)。

问题是:

  1. 不一致。如此说来,即使它应该是“关于”或类似的东西,它也可以打印“关于”一词。

  2. 我想确保一行中最多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

如果随机选择修改了字母,则将其计数。