为了账号安全,请及时绑定邮箱和手机立即绑定

如何让 python 识别字符串中的正确子字符串?

如何让 python 识别字符串中的正确子字符串?

慕少森 2022-10-18 16:28:25
我真的在为 python3 中的缓冲而苦苦挣扎。我正在尝试实现一个简单的收音机。我有一个接收器类。它向用户显示可用的电台。这些电台是动态的,因此它们会出现和消失。Welcome to the radio, select station you want to listen to.> 1) Rock Station  2) Hip Hop Station  3) Country Station所以接收器必须同时等待输入:来自管道(关于新站显示/消失的信息)和来自标准输入(用户可以使用向上和向下箭头来更改站)。此外,当用户使用箭头键更改电台时,我必须一次从标准输入读取一个字符。这就是标准select.select不起作用的原因(它等待用户按 ENTER 键):class _GetchUnix:    def __init__(self):        import tty, sys    def __call__(self):        import sys, tty, termios        fd = sys.stdin.fileno()        old_settings = termios.tcgetattr(fd)        try:            tty.setraw(sys.stdin.fileno())            ch = sys.stdin.read(1)        finally:            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)        return chself.char_reader = _GetchUnix()[...]def __read_order_from_user(self,):    k = self.char_reader()    # Check for up/down arrow keys.    if k == '\x1b':        k = self.char_reader()        if k != '[':            return        k = self.char_reader()        if k == 'A':            self.__arrow_down()        if k == 'B':            self.__arrow_up()    # And check for enter key.    if k == '\r':        self.menu[self.option].handler()def __update_stations(self,):    [...]def run(self):    self.display()    while True:        rfds, _, _ = select.select([pipe, sys.stdin], [], [])        if pipe in rfds:                self.__update_stations()        if sys.stdin in rfds:            self.__read_order_from_user()我在互联网上找到了如何从标准输入中逐个读取字符:Python 从用户读取单个字符 并且它确实有效,但与select.select.
查看完整描述

4 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

您的第一个if陈述的问题是,您评估了 、 等的真值"1","2"它们都是真的。


您必须in card每次重复:


def cardval(card):

    if "2" in card or "3" in card or "4" in card: # etc.

        return int(re.findall("\d+",card)[0])

    # etc.


查看完整回答
反对 回复 2022-10-18
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

你应该改变:

if "2" or "3" or ... in card:

至:

if "2" in card or "3" in card or ...:

等等


查看完整回答
反对 回复 2022-10-18
?
浮云间

TA贡献1829条经验 获得超4个赞

您可以执行以下操作:


def cardval(card):

    card_digit = re.findall("\d+",card)

    if card_digit:

        return card_digit[0]

    elif "Ace" in card:

        return 1

    else:

        return 10


查看完整回答
反对 回复 2022-10-18
?
冉冉说

TA贡献1877条经验 获得超1个赞

作为其他答案的替代方案,您还可以执行以下操作:


>>> card = ['Diamond_Ace', 'Diamonds_1', 'Diamonds_Jack']

>>> if any(i.endswith(('2', '3', '4', '5', '6', '7', '8', '9', '10')) for i in card):

...     print('Found it')

... 

>>> if any(i.endswith(('Jack', 'Queen', 'King')) for i in card):

...     print('Found it')

... 

Found it

>>> if any(i.endswith('Ace') for i in card):

...     print('Found it')

... 

Found it


查看完整回答
反对 回复 2022-10-18
  • 4 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信