【问题标题】:Break a while loop when two specific letters can be found in string [duplicate]当可以在字符串中找到两个特定字母时打破while循环[重复]
【发布时间】:2021-08-26 04:50:29
【问题描述】:

我有一个字符串变量 (mystring)。在while循环中,用户可以输入字符串的内容,当它包含字母'a'和字母'b'时,我想打破循环。我尝试了以下方法:

mystring = ''

while 'a' or 'b' not in mystring:
    mystring = input('write:')

如果我只使用其中一个字母(没有or 语句),while 循环就可以完美运行。 如果我检查 mystring 例如输入'abacjihgea'后使用

'a' and 'b' in mystring

它返回True。那它不应该打破while循环吗?

很遗憾,我似乎无法解决这个问题。

【问题讨论】:

  • while (a not in mystring) and (b not in mystring):?
  • 感谢托马斯·韦勒!成功了!
  • @rdas 我不认为 dup 目标(问题和答案)在这种情况下应该有帮助,所以我投票重新开放。
  • @Guy 我的意思是,对于熟悉in 和布尔表达式的人来说,dup 关系很容易看出,但对于不知道他们实际在做什么的初学者来说,就不是这样了。以 Python 中的 0 < x < 10 为例,它看起来像学校数学,但不是......

标签: python while-loop conditional-statements


【解决方案1】:

您应该单独检查并使用and条件

while ('a' not in mystring) and ('b' not in mystring) :
     mystring=input()

一种更简洁的方法是对多个字符使用集合和交集

while not {'a','b'}.issubset(mystring):
    mystring=input()

【讨论】:

    【解决方案2】:

    您也可以使用正则表达式。 如果字母顺序是确定的,例如a 后跟 b 然后 a.*b 否则 (a.*b|b.*a)

    import re
    mystring = ''
    
    while not re.search('(a.*b|b.*a)',mystring):
        mystring = input('write:')
    

    【讨论】:

    • 效率不高,也不好概括。如果您有要搜索的字母列表变量怎么办:构建一个复杂的正则表达式?
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 2019-04-26
    • 2021-12-15
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多