Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可能会在字符串中添加额外的句子/单词_Python_String - Fatal编程技术网

Python 可能会在字符串中添加额外的句子/单词

Python 可能会在字符串中添加额外的句子/单词,python,string,Python,String,我已经多次创建了类似的代码: if condition(): word = " not" else: word = "" print "A five ounce bird could{0} carry a one pound coconut".format(word) 我在这里把问题简单地说了一遍,在“实践”中,“A”,“五”,“鸟”,“A”,“一”,“椰子”都有额外的变量,因此它们可能会发生变化,并随之增加了复数s-e等等 它总是让我觉得有点不满意。“not”之前需要的额外

我已经多次创建了类似的代码:

if condition():
    word = " not"
else:
    word = ""

print "A five ounce bird could{0} carry a one pound coconut".format(word)
我在这里把问题简单地说了一遍,在“实践”中,
“A”
“五”
“鸟”
“A”
“一”
“椰子”
都有额外的变量,因此它们可能会发生变化,并随之增加了复数s-e等等

它总是让我觉得有点不满意。
“not”
之前需要的额外空间和
{0}
之前缺少空间都很麻烦,但是如果
word
是空的,我不希望有两个空格,所以我看不到其他方法


创建两条单独的消息会中断,有时甚至不可行,因为可能的组合数量太多


有更优雅的方法吗?

创建一个单词列表,必要时插入,然后加入(单词)

如果有逗号/句点,构建一个句子结构:

[['If', 'there', 'are', 'periods'], ', ', ['build', 'a', 'sentence', 'structure'], '.']
在函数间使用相应的空格(逗号后的空格,括号前的空格,…),然后使用
'.join()
组内的单词和
'.join()
单个组。(感谢@Alfe提出的以不同方式连接单词和组的建议)


使用DRY创建两个单独的消息中断

如果您关心,那么创建两条单独的消息可能是唯一合理的方法。

对于
中的“not”
情况,请保持简单:

print "A five ounce bird could{0} carry a one pound coconut".format(" not" if condition() else "")
我会

word = ("could" if not condition() else "could not")

print "A five ounce bird {0} carry a one pound coconut".format(word)
:p

编辑:对于一般情况,这是你想要的,我会选择作文。(好吧,这对我来说太简单了,但很重要):

这给了你:

A number of words make a clause, and a number of clauses make a sentence. A collection of sentences makes a paragraph

仔细解释一下,你可以让句子第一个单词大写,等等。

因为英语(以及我所知道的其他语言)中的空格必须在哪里和不在哪里的规则是明确的,你可以使用所有句子部分的简单列表(例如,
['If','there','are','commas','we','insert','them','.]
)然后编写一个专门的连接函数,该函数应用英语规则来确定空格必须插入的位置(例如,单词之间、逗号之后、圆括号之前等)。

另一种处理方法,但我不确定这是否是您要找的

word = "not"

print "A five ounce bird could{0} carry a one pound coconut".format(" "+word if condition() else "")
好的,还有一种方法。但事实上,它们几乎都是相似或相同的

def format_word(word):
    if word:
        return " " + word
    else:
        return ""

print "A five ounce bird could{0} carry a one pound coconut".format(format_word(word))
但也许,所有这些都会让人讨厌,因为它们实际上是相似的

最后一种方法可能是:

if condition():
    word = "not"
else:
    word = ""

wrd =  "A five ounce bird could {0} carry a one pound coconut".format(word)
print wrd.replace("  ", " ") # replace all double spaces with singular one...

但是,是的,它也很脏…

我将添加另一种可能性,我只是想到了我自己。子类
string.Formatter
并添加自定义转换器,以便您可以键入

fmt = MyFormatter()
print fmt("Problem {not!w} solved", not="")


然后,格式化程序将删除所有字段前面的空格,并使用
!如果变量为空/未指定,则使用w
转换器。这至少需要重新实现
vformat
convert\u field
方法,但这应该是可行的。

它可以抓住外壳……如果您想将程序国际化,创建两条单独的消息是正确的方法。国际化也将有助于复数。你应该检查一下
gettext
等等。这并不能真正回答问题,这与
中的“not”
空间有关。这只适用于你的特殊情况,但我的观点是,你不应该将“not”视为与“can”分开的粒子。这让生活更轻松。避免问题的好方法。:)然而,这并不能解决一般性问题,因为这并不总是可行或实用的。关于你向@eumiro提出的问题(“如果插入的单词正好在句点之前怎么办?”),我会一次构造一个句子,然后连接它们,例如“.”。连接(句子)。逗号等类似的过程。至少这是非常令人印象深刻的代码!但现在,我对不得不分别引用课文中的每个单词感到厌烦。(我想这是无法取悦某些人的…)哦,来吧。。。这是为了做一个例子,说明你可以从简单的组件开始成长。我可以用
子句(“许多单词组成一个子句”.split())
,就这点而言。我只是指出了制作通用解决方案的基本要素!:PI建议将
'
上的部分连接起来,而不是
'
,并将所需的空格放入字符串常量中(例如
,'
)。通过这种方式,您还可以处理开括号(字符前需要空格)等。我建议编写
['If','there','are','periods']
,而不是表示
['If','there','are','periods']
。这使得讨厌的空格更加突出。这是一个优势吗?Python有各种各样的方法来做到这一点,但在你的情况下,它们中的每一种可能都会有更少或更多的令人讨厌的东西……这就像给猪化妆一样——没有多大帮助。不过,中间的想法是最好的。将丑陋隐藏在一个函数中要比将其渲染到所有代码中要好得多。一个函数所能提供的所有方法都是在猪身上弥补的(:据我所知,在单词前使用空格(如代码示例中所示)这是人们做这件事的方式。否则,即使你在一个字符串格式化类中做这件事,它也会被隐藏起来,但脏东西仍然会存在。我喜欢这个想法,我认为它至少比eumiro的建议更可取。尽管需要单独引用每个单词会使所有这些变体不那么吸引人,我认为。是的,我再次建议使用“123”.SPLIT(<)/代码>或一个专门的<代码>句子(23个,456个)< /代码>,用于标点符号和单词边界。“,,,单词间标点符号,比如
不要
,还有其他类似连字符的东西。是的,自然语言充满了肮脏;-]我简直疯了
fmt = MyFormatter()
print fmt("Problem {not!w} solved", not="")