gpt4 book ai didi

python - 如何仅 .replace() 单词的一部分?并从字符串中提取整数?

转载 作者:行者123 更新时间:2023-12-01 09:33:49 25 4
gpt4 key购买 nike

尝试找出如何使用列表、For 循环和 .replace() 只替换单词的一部分。我还在研究如何从代码中提取整数,以便 +1 并返回数字。

到目前为止我的代码如下:

dictZero = [ "zero", "none", "nil", "null" ]
dictOne = [ "one", "won", "juan" ]
dictTwo = [ "two", "to", "too", "tu" ]
dictThree = [ "three" ]
dictFour = [ "four", "for", "fore" ]

userInput = input ( "Enter your sentence to inflate: " )

for i in userInput.split():
for e in dictFour:
if e in i:
userInput = userInput.replace ( i, "five" )
for d in dictThree:
if d in i:
userInput = userInput.replace ( i, "four" )
for c in dictTwo:
if c in i:
userInput = userInput.replace ( i, "three" )
for b in dictOne:
if c in i:
userInput = userInput.replace ( i, "two" )
for a in dictZero:
if a in i:
userInput = userInput.replace ( i, "one" )
#This seems to work but not sure how to assign it back into the Input
if int(i):
i = int(i) + 1
print (i)
print ( userInput)

示例:输入 =“1630 sleep 前”输出=“我在 1631 去三张床之前”

所以代码在很大程度上按照我想要的方式工作。如果您在列表中输入一个单词,它会将其替换为相应的单词。

但是!我一生都无法弄清楚如何进一步分解 userInput 来替换诸如“before”之类的单词,并使结果为“befith”而不是第五。也许还有一个 if 语句先用 .split() 然后用 .join()?

如有任何帮助或建议,我们将不胜感激。感谢您抽出时间。

最佳答案

您的代码将“before”变成“Five”而不是“be Five”的原因是这里的这行代码:

userInput = userInput.replace ( i, "five" )

在此上下文中,i 是字符串“before”,因此您要将整个单词替换为“Five”。代替 i 使用的正确变量是 e,它当前是字符串“for”。

userInput = userInput.replace ( e, "five" )

现在我们得到的输出是“Be Fivee I go 3 bed at 1630”。注意“Be Fivee”中的双“e”。这是因为您在 dictFour 中的单词排序不正确:

dictFour = [ "four", "for", "fore" ]

由于较短的单词“for”列在较长的单词“fore”之前,因此代码将始终在每次出现“fore”时替换“for”,从而在输出中给出重复的“e”。您必须重新排序列表,使较长的单词列在较短的单词之前:

dictFour = [ "four", "fore", "for" ]  # swap "for" and "fore"
dictTwo = [ "two", "too", "to", "tu" ] # swap "to" and "too"

下一个问题是您对输入中数字的处理:

if int(i):
i = int(i) + 1
print (i)
如果单词无法转换为数字,

int(i) 将抛出 ValueError,从而导致程序崩溃。即使检查通过,i = int(i) + 1 也只会更新 i 变量的值,但不会更改输入字符串中的数字。

<小时/>

我们修复代码的第一件事是删除那些编号列表 dictZerodictOne 等。每当你有超过 3 个带有数字的变量时在他们的名字中,这表明你应该将它们存储在列表或字典中。在本例中,由于值的正确排序至关重要,因此我们将使用列表并对数字进行降序排序:

replacements = [('five', [ "four", "fore", "for" ]),
('four', [ "three" ]),
('three', [ "two", "too", "to", "tu" ]),
('two', [ "one", "won", "juan" ]),
('one', [ "zero", "none", "nil", "null" ]),
]

降序很重要,这样后续的替换就不会把“一”变成“二”变成“三”变成“四”等等。

解决了这个问题,我们现在可以开始修复代码了。也许最简单的方法是将用户输入拆分到一个列表中,并在该列表中执行替换:

words = userInput.split()
for i, word in enumerate(words):
# if the word is a number, increment it
try:
word = str(int(word) + 1)
except ValueError:
# if it isn't a number, loop over all replacements and substitute them
for replacement, words_to_replace in replacements:
for word_to_replace in words_to_replace:
word = word.replace(word_to_replace, replacement)

# assign the updated word back into the list
words[i] = word

userInput = ' '.join(words)
print(userInput) # output: Befive I go five bed at 1631

另一种选择是直接替换输入字符串中的所有单词并使用正则表达式来增加数字:

import re

for replacement, words_to_replace in replacements:
for word_to_replace in words_to_replace:
userInput = userInput.replace(word_to_replace, replacement)

userInput = re.sub(r'\d+', lambda match: str(int(match.group())+1), userInput)
print(userInput) # output: Befive I go five bed at 1631

关于python - 如何仅 .replace() 单词的一部分?并从字符串中提取整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com