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

新手求助:编写Pangram判断函数时运行报错,求排查解决

Pangram判断函数错误修复

先看你代码里的几个核心问题:

  • 循环嵌套冗余:sen是去掉空格后的字符串,for words in sen已经在遍历每一个字符了,再套一层for letter in words完全没必要,此时letter和words是同一个字符,纯属多此一举。
  • 大小写不匹配导致删除失败:你用letter.lower()判断字符是否在字母列表里,但删除的是原letter(比如原字符是大写A,letter.lower()是a在列表中,但你删的是A,列表里只有小写a,自然找不到,触发ValueError)。
  • 字母列表混入多余元素:列表末尾的整数1完全没必要,还会干扰后续判断逻辑,直接删掉即可。
  • 重复字符触发删除错误:如果句子里同一个字母出现多次,第一次删除后列表里就没这个字母了,第二次再删就会因为找不到元素报错。

给你改好的代码,每一步都加了注释方便理解:

def panagram(sen):
    # 把输入句子统一转成小写,同时去掉空格
    sen_lower = sen.lower().replace(" ", "")
    # 用集合存储完整小写字母,集合判断存在性更快,还能自动去重
    alphabets = set("abcdefghijklmnopqrstuvwxyz")
    # 遍历处理后的句子字符
    for char in sen_lower:
        # 如果字符在字母集合里,就移除它
        if char in alphabets:
            alphabets.remove(char)
    # 集合为空说明所有字母都覆盖到了
    return "PANAGRAM" if not alphabets else "Not Panagram"

测试示例:

  • 输入"The quick brown fox jumps over the lazy dog"会返回PANAGRAM
  • 输入"Hello World"会返回Not Panagram

另外给你一个更简洁的写法,利用集合的子集判断特性:

def panagram(sen):
    sen_chars = set(sen.lower().replace(" ", ""))
    # 判断26个字母是否都是句子字符集合的子集
    return "PANAGRAM" if sen_chars >= set("abcdefghijklmnopqrstuvwxyz") else "Not Panagram"

内容的提问来源于stack exchange,提问作者Shubh Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:05:38