You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python函数中使用.startswith()?代码无法识别'How'类问句

解决startswith()区分大小写导致的疑问词匹配问题

嘿,这个问题我刚学Python的时候也踩过坑!核心原因很简单:startswith()方法是区分大小写的——你定义的question_words都是大写开头的,而输入小写的how时,原字符串开头是小写的'h',自然和元组里的'H'匹配不上,所以才会返回带句号的错误结果。

给你两种简单直接的解决思路:

方法一:利用已有的首字母大写字符串判断

你已经写了capital = phrase.capitalize()把输入转成了首字母大写的格式,直接用这个处理后的字符串去判断startswith()就好:

def sentence_checker(phrase):
    capital = phrase.capitalize()
    question_words = ('How', 'What', 'Why', 'When', 'Who', 'Which', 'Whose', 'Whom')
    # 改用处理后的capital来匹配疑问词
    if capital.startswith(question_words):
        return '{}?'.format(capital)
    else:
        return '{}.'.format(capital)

# 别忘了初始化listlist,不然会抛出NameError
listlist = []
while True:
    sentence = input('Say Something: ')
    if sentence == '\\end':
        break
    else:
        listlist.append(sentence_checker(sentence))
print(' '.join(listlist))

这样不管用户输入的是how还是How,capital都会变成How,完美匹配元组里的疑问词,就能返回带问号的正确结果了。

方法二:统一转小写匹配

如果不想依赖首字母大写的处理,也可以把疑问词改成小写,同时把输入字符串转成小写再判断:

def sentence_checker(phrase):
    capital = phrase.capitalize()
    question_words = ('how', 'what', 'why', 'when', 'who', 'which', 'whose', 'whom')
    # 把输入转成小写后匹配,兼容任意大小写输入
    if phrase.lower().startswith(question_words):
        return '{}?'.format(capital)
    else:
        return '{}.'.format(capital)

listlist = []
while True:
    sentence = input('Say Something: ')
    if sentence == '\\end':
        break
    else:
        listlist.append(sentence_checker(sentence))
print(' '.join(listlist))

这种方法更灵活,哪怕用户输入的是HOW也能正确识别。

另外提个小细节:你原来的代码里listlist没有初始化,运行的时候会报错,记得在循环前加上listlist = []哦~

内容的提问来源于stack exchange,提问作者Samrath Chadha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:17:36