目前,我正在尝试在Python中获取一个方法,以返回一个零个,一个或两个字符串的列表,以插入字符串格式化程序,然后将它们传递给字符串方法.我的代码看起来像这样:
class PairEvaluator(HandEvaluator):
def returnArbitrary(self):
return ('ace', 'king')
pe = PairEvaluator()
cards = pe.returnArbitrary()
print('Two pair, {0}s and {1}s'.format(cards))
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码时,编译器会将IndexError:tuple索引超出范围.
我应该如何构造我的返回值以将其作为参数传递给.format()?
如果我在C#中这样做:
Console.WriteLine(DateTime.Now.ToString("ddd M/dd/yy"));
Run Code Online (Sandbox Code Playgroud)
我希望输出像这样:
Wed 6/15/11
Run Code Online (Sandbox Code Playgroud)
但它确实输出了这个:
Wed 6 15 11
Run Code Online (Sandbox Code Playgroud)
为什么斜线消失了?有没有办法防止这种情况,并以预期的格式输出日期?
考虑toString()bean 的自定义实现:
@Override
public String toString() {
String.format("this is %s", this.someField);
}
Run Code Online (Sandbox Code Playgroud)
this is null如果someField为null,则产生if .
有没有办法将null空值参数的默认字符串表示形式覆盖到另一个文本,即? 没有replaceAll(...)在toString方法中显式调用?
注意:bean继承自可以实现的超类Formattable(http://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html),但我似乎并不理解如何制作这项工作.
编辑:为了举例,该片段被过度简化,但我不是在寻找三元运算符解决方案,someField==null ? "?" : someField因为:
toString()因此检查所有字段过于繁琐且不流畅.相反,可以使用Formattable界面或有一些自定义Formatter(这是final顺便说一句)完成任何事情?
我在循环中有一个字符串,对于每个循环,它都填充了如下所示的文本:
"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"
Run Code Online (Sandbox Code Playgroud)
我只想检索字符串中文本的第一个数字,当然,我不知道长度.
提前致谢!
我有一个布尔变量,其值我想在格式化的字符串中显示.我尝试使用string.format,但是对于语言参考中列出的任何格式选项选项,可以获得以下内容:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(string.format("%c\n", true))
stdin:1: bad argument #2 to 'format' (number expected, got boolean)
stack traceback:
[C]: in function 'format'
stdin:1: in main chunk
[C]: ?
Run Code Online (Sandbox Code Playgroud)
我可以得到布尔通过增加显示tostring,
> print(string.format("%s\n", tostring(true)))
true
Run Code Online (Sandbox Code Playgroud)
但对于这个lua初学者来说,这似乎是间接的.有没有我忽略的格式化选项?或者我应该使用上述方法?别的什么?
List<string> test = new List<string>();
test.Add("test's");
test.Add("test");
test.Add("test's more");
string s = string.Format("'{0}'", string.Join("','", test));
Run Code Online (Sandbox Code Playgroud)
现在s是,'test's','test','test's more'
但我需要用2个单引号替换内部引号
像这样: 'test''s','test','test''s more'
更新:我得到它如下工作,但我希望如果可能的话更清洁.
string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'");
Run Code Online (Sandbox Code Playgroud) 这就是我在做的事情
>>> import logging
>>> logging.getLogger().setLevel(logging.INFO)
>>> from datetime import date
>>> date = date.today()
>>> logging.info('date={}', date)
Traceback (most recent call last):
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 846, in emit
msg = self.format(record)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 723, in format
return fmt.format(record)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 464, in format
record.message = record.getMessage()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 328, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Logged from file <stdin>, line 1
>>>
Run Code Online (Sandbox Code Playgroud)
我的python版本是
$ python --version
Python …Run Code Online (Sandbox Code Playgroud) 正如标题所述,这两面旗帜有什么区别?看来他们都使用repr()将值转换为字符串?此外,在这行代码中:
"{0!r:20}".format("Hello")
Run Code Online (Sandbox Code Playgroud)
!r前面的0是什么?
我们有一个需要确定性的游戏,因为它是多人游戏模型的一部分.我们还使用Lua,它在sprintf内部使用(格式为%.14g).
打印数字如0.00001时会出现问题.在某些情况下,它会打印1e-05,在某些情况下,它会打印1e-005(额外为零).
例如,当使用Visual Studio 2015进行编译时,它会进行打印1e-005,并使用Visual Studio 2013进行打印1e-05.我尝试了不同的区域设置,但似乎没有任何效果.
问题是:实现确定性结果的最佳解决方案是什么? 我不关心科学记谱法是否标准化或消除.
我想到的解决方案:
%f符号时,它不会忽略无关紧要的零,因此%.14f会导致不切实际的长数.sprintf方法(从某些标准库粘贴的副本)我看到很多人使用这样的格式字符串:
root = "sample"
output = "output"
path = "{}/{}".format(root, output)
Run Code Online (Sandbox Code Playgroud)
而不是简单地连接像这样的字符串:
path = root + '/' + output
Run Code Online (Sandbox Code Playgroud)
格式化字符串是否具有更好的性能还是仅适用于外观?