【问题标题】:How do I choose 2 or more letters in a word?如何在一个单词中选择 2 个或多个字母?
【发布时间】:2020-10-10 20:46:01
【问题描述】:

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

问题是:

  1. 不一致。话虽如此,它可以打印单词'about',即使它应该是'About'或类似的东西。

  2. 我想确保一行中的大写字母或小写字母最多不超过 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 次修改?
  • 您想要“随机”但“不一致”。并且您希望连续不超过三个相同大小写的字母。你确定要random,比如掷硬币来判断字母的大小写吗?

标签: python loops random uppercase lowercase


【解决方案1】:

您需要将输入拆分为单词,确定要更改的单词中的多少个位置(如果单词较短,则最少 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

【讨论】:

  • 如果我想将 word 中的下一个字母保留为 lower() 或 upper() 取决于前面的字母怎么办? IE。如果连续两三个单词出现在上,脚本使下一个字母变低,反之亦然?
  • @Preacher,您考虑如何编写代码,尝试编写代码,谷歌搜索是否有类似的在线内容,然后提出一个新问题,提供您的代码为 minimal reproducible example
【解决方案2】:

最多修改 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

如果随机选择修改了字母,则计算它。

【讨论】:

  • 我试过你的,但还是有一些不一致的地方。你的代码看起来好多了,我什至没有想过不要把所有东西都放在 random.choice 方法下,而不是把它放在一个下面。我的问题是我什至没有想过要初始化一个随机计数,它是做什么用的,它是如何应用的?
  • 如果随机选择修改了字母(使其与输入不同),则计数增加。当它达到 3 次修改 (2) 时,它会重置为 0。你能举一个不一致的例子吗?
  • 当您输入长文本时经常发生这种情况。有些词进来时没有被“嘲笑”。随便一个字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 2015-03-28
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多