gpt4 book ai didi

python - 在Python中交换字符串的第一个和最后一个字母

转载 作者:行者123 更新时间:2023-12-01 05:42:16 25 4
gpt4 key购买 nike

我希望我在这里遗漏了一些明显的东西,但我正在使用 Python CodingBat 网站,并遇到了问题 front_back :

For a string passed in, return it with its first and last characters swapped, if the string length is greater than 1.

我想出了一个单行解决方案,我认为它就足够了,但 Coding.bat 拒绝接受它,并出现索引超出范围错误。

我在 IDLE(64 位 Windows 版本)中进行了尝试,我将问题归结为:

len(str) < 2 and str or 'doh ' + str + ' /doh'

奇怪的问题是设置 str = ''返回:

'doh  /doh'

这不应该是因为 len('') 是 0,但是 str='a'返回:

'a'

str='abc'返回:

'doh abc /doh'

这是我所期望的......

所以我的问题是真的;为什么检查 '' 的 len 会转到三元运算符的 OR 条件,但运行 len('')控制台返回0,明显小于2?

编辑:

但是,这个解决方案实际上有效:

  def front_back(str):
if len(str) < 2:
return str
else:
return str[-1] + str[1:-1] + str[0]

到“mtadd”;感谢您的回答,但这不是一个逻辑和/或这是一个 pythonic 三元运算符:

return (statement) and <statement was true> or <statement was false>

与 C# 相同:

return statement
? trueValue
: falseValue;

最佳答案

问题是operator precedence .

对于您的表达式,隐式排序如下

((len(str) < 2) and str) or ('doh ' + str + ' /doh')

str = ""为例, len(str) < 2评估True ,但是str ,一个空字符串,计算结果为 False ,因此and表达式为False ,所以 or 的右操作数二进制运算成为表达式的结果。

对于 str = "abc" 的情况, len(str) < 2False ,所以and表达式短路为 False ,以及 or 右侧的表达式就是结果。

对于 str = "ab" 的情况, len(str) < 2是 True,所以 and表达式将其右操作数传递给 or二元运算符,并且自 bool("ab") == Truestr的值成为表达式的结果。

如您所见,使用 and/or如果您的结果是 True ,则与其他语言的三元运算符的工作方式不同条件相当于False ,例如 True and 0 or 1产量1 ,而使用 0 if True else 1产量0 .

我建议使用Python的三元if/else表达式,例如:

str if len(str) < 2 else 'doh ' + str + ' /doh'

关于python - 在Python中交换字符串的第一个和最后一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17224612/

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