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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:33