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

如何解决Python中‘AttributeError: 'list' object has no attribute 'find'’错误

解决AttributeError: 'list' object has no attribute 'find'问题

嘿,我来帮你搞定这个错误!咱们先拆解问题根源,再给你修复好的代码。

错误为啥会出现?

你看代码里这行:p = aplha.find(a)——这里犯了个拼写错误!你之前定义的字符串变量是alpha(a-l-p-h-a),结果写成了aplha(a-p-l-h-a),把l和p搞反了。

如果之前你不小心在测试时把aplha定义成了列表(比如误写过aplha = ['a','b',...]),那就会触发这个错误——因为列表确实没有find()方法,只有字符串才有这个方法用来查找字符位置。

另外,就算拼写对了,原代码也有小问题:比如输入大写字母或者非字母字符的话,find()会返回-1,后续加密逻辑就会出错。

修复后的完整代码

我不仅帮你修正了拼写错误,还完善了加密逻辑(实现标准的凯撒密码移位),加上了输入校验:

from random import randint
alpha = 'abcdefghijklmnopqrstuvwxyz'
# 生成1-25的密钥(选26的话移位后等于没加密,意义不大)
key = randint(1, 25)
print(f"生成的加密密钥是: {key}")
a = input('请输入一个英文字母: ').lower()  # 统一转小写,兼容大写输入

# 先检查输入是否有效
if a not in alpha:
    print("抱歉,请输入有效的英文字母哦!")
else:
    # 执行加密:找到字符位置后移位,取模26实现循环
    char_pos = alpha.find(a)
    encrypted_pos = (char_pos + key) % 26
    encrypted_char = alpha[encrypted_pos]
    print(f"加密后的字符是: {encrypted_char}")

额外小提示

  • 用%26是为了实现循环移位:比如字母z(位置25)加1后变成26,取模26得到0,对应字母a,符合凯撒密码的循环逻辑。
  • 加入lower()是为了兼容用户输入大写字母的情况,让代码更健壮。
  • 输入校验能避免用户输入数字、符号等无效内容时出现异常。

内容的提问来源于stack exchange,提问作者Vedant Rane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:12:26