python - 为什么“或”条件中的语句顺序很重要?
问题描述
我正在解决一个问题,我正在将单词反转到位。我注意到,根据我的语句在我的or
运算符之前和之后的顺序,代码将无法工作或工作。
如果我改变
if i == len(s1) or s1[i] == ' ':
至
if s1[i] == ' ' or i == len(s1):
我得到错误
Traceback (most recent call last):
File "reverse_words_in_place.py", line 58, in <module>
reverse_words(s1)
File "reverse_words_in_place.py", line 6, in reverse_words
if s1[i] == ' ' or i == len(s1):
IndexError: list index out of range
def reverse_words(s1):
reverse_string(s1, 0, len(s1)-1)
start_index = 0
for i in range(len(s1)+1):
if i == len(s1) or s1[i] == ' ':
reverse_string(s1, start_index, i-1)
start_index = i + 1
return s1
def reverse_string(s1, first, last):
while(first < last):
s1[first], s1[last] = s1[last], s1[first]
first += 1
last -= 1
s1 = ['c', 'a', 'k', 'e', ' ',
'p', 'o', 'u', 'n', 'd', ' ',
's', 't', 'e', 'a', 'l']
reverse_words(s1)
# Prints: 'steal pound cake'
print(''.join(s1))
此代码的输出是
steal pound cake
只要
if i == len(s1) or s1[i] == ' ':
为什么这些陈述的顺序很重要?
解决方案
因为 if i == len(s1)
istrue
第二个语句没有被评估并且你没有得到IndexError
.
推荐阅读
- terraform - terraform eks 节点标签
- python - 如何在 PyQt5 布局中更紧密地对齐两个小部件?
- xamarin - 如何在 Xamarin.Forms 的中继器中标记复选框?
- flutter - ListTile 标题使它的孩子无论如何都占据全宽
- sql - Sql 查询按问题分组,创建月平均值
- kotlin - 如何在 Kotlin 中修复“未解析的引用:int”
- java - 如何确定所有顶点与某种类型顶点的最短距离?
- javascript - 移动后获取鼠标光标的坐标
- node.js - Lambda 函数导致共享访问令牌的竞争条件 | 无服务器框架 | 节点
- selenium - 在 Selenium docker grid 4 中添加实例/并发会话不起作用