Python字符串标点查找问题:Kattis题'Canadians, eh?'报错求助
解决Kattis《Canadians, eh?》题目代码报错问题
题目规则
输入一个句子,若句子以“eh?”结尾则输出“Canadian!”,否则输出“Imposter!”。
你的问题
你当前的代码尝试定位“eh”,但在识别问号时触发错误:can only concatenate str (not "int") to str,原代码如下:
a = input() found = a.find('e') found2= a[found + 1] found3=a[found2 + 1] if a[found + 1] == 'h' and found3 =='?': print("Canadian!") else : print("Imposter!")
错误原因
found2 = a[found + 1]得到的是单个字符(比如找到'e'后,取它下一位的'h'),属于字符串类型,你后续用found2 + 1相当于把字符串和整数相加,这在Python里是不允许的,直接触发类型错误。- 另外,用
find('e')找第一个'e'的逻辑本身存在漏洞:如果句子中间出现'e',会误判为结尾的“eh?”,无法保证定位到的是句子末尾的目标后缀。
修正方案
方案一:使用字符串内置方法(最简洁可靠)
Python字符串自带endswith()方法,可直接判断字符串是否以指定后缀结尾:
a = input().strip() # 可选:去除首尾空白,避免输入前后空格导致误判 if a.endswith('eh?'): print("Canadian!") else: print("Imposter!")
方案二:通过索引手动判断
如果不想用内置方法,可通过字符串索引直接检查末尾的两个字符(注意先判断字符串长度,避免索引越界):
a = input().strip() if len(a) >= 2 and a[-2:] == 'eh?': print("Canadian!") else: print("Imposter!")
内容的提问来源于stack exchange,提问作者user20502817
相关产品推荐
相关产品推荐

