【问题标题】:Exiting While loop when reaching the end of the string到达字符串末尾时退出 While 循环
【发布时间】:2017-12-28 04:59:19
【问题描述】:

我目前正在学习使用 ord() 和 chr(),但是在使用以下代码时遇到了困难。

b = '1101'
i = 0
while b != ' ' :
    i = i*2 + ( ord(b[0]) + ord('0') )
    b = b[1:]



Traceback (most recent call last):
  File "<pyshell#86>", line 2, in <module>
  i = i*2 + ( ord(b[0]) + ord('0') )
IndexError: string index out of range

为什么我的字符串超出范围并抛出错误,而不是像我预期的那样退出循环?

【问题讨论】:

  • b 不会变成空格。空间从何而来?顺便说一句,标题不错。
  • 您的错误基于 while 循环和缩小的字符串,您可能希望从答案中删除 chrord 部分并给它一个更具描述性的标题,以便未来的人有同样错误的可以找到这个答案。
  • edit您的帖子和a) 使标题描述您遇到的问题或您要问的问题,因此它对未来的读者在列表中看到它有一些用处搜索结果,并且 b) 比遇到困难更具体地说明您遇到的问题。您发布的代码有哪些具体困难?见How to Ask

标签: python-2.7 list while-loop


【解决方案1】:

你的 while 条件永远不会成立。 ' ' 不代表什么都没有,它代表一个空的空间。除非您的原始字符串末尾包含一个空格,否则它永远不会为真。

如果你将它设为'' 而不是' ',它应该可以工作。

此外,由于变量在持有值时评估为 True,而在缩减为 None 类型时评估为 False,您可以编写与 while b: 相同的内容。只要b 有一个值,这将是正确的,但是一旦它为空,它将停止循环。

【讨论】:

  • 虽然更惯用的写法可能是while b:
  • 感谢您确认我会将其添加到答案中
  • 是的!除了空集合([]{}()set() 等)、False0 和空字符串 ''(我想是只是一个空字符集合)
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多