求助:Python执行字符串转盲文编码时触发TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'str'报错
解决TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'str'的问题
嘿,我来帮你搞定这个报错问题!你遇到的这个类型错误,核心原因是把Python内置的input函数当成字符串变量来拼接了。看你代码里的这两行:
word=input + '000001' word=input+braillecodes[asciicodes.index(s[i].lower())]
这里的input是Python用来获取用户输入的内置函数,不是你之前定义的word变量,函数和字符串当然不能用+拼接,所以触发了这个错误。
除此之外,你的代码还有几个小问题需要调整:
- 函数参数
s完全没用到,反而在函数内部重新调用input拿输入,这不符合函数的设计逻辑,应该直接用传入的s - 循环里每次都直接赋值
word,而不是累加结果,最后只会保留最后一个字符的盲文 - 大写字母的处理逻辑不对,应该在对应字符的盲文前加
000001标识,而不是乱拼接
我给你改好了代码,你可以直接用:
def solution(s): # 初始化空字符串用来存最终的盲文结果 braille_result = "" # 遍历输入字符串的每一个字符 for char in s: # 如果是大写字母,先添加大写标识,再转成小写处理 if char.isupper(): braille_result += '000001' char = char.lower() # 找到字符在对照表中的位置,拼接对应的盲文编码 try: char_index = asciicodes.index(char) braille_result += braillecodes[char_index] except ValueError: # 如果字符不在对照表中,用空格的盲文代替(也可以改成你需要的默认值) braille_result += '000000' return braille_result # ASCII-盲文对照表 asciicodes = [' ', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] braillecodes = [ '000000', '100000', '110000', '100100', '100110', '100010', '110100', '110110', '110010', '010100', '010110', '101000', '111000', '101100', '101110', '101010', '111100', '111110', '111010', '011100', '011110', '101001', '111001', '010111', '101101', '101111', '101011'] # 测试一下,传入's'会输出对应的盲文 print(solution('s')) # 也可以测试大写字母,比如print(solution('Hello World'))
给你说说修改的关键点:
- 放弃了误用的
input函数,用braille_result变量来逐步累加盲文结果 - 直接使用函数传入的
s参数,让函数可以处理任意传入的字符串,而不是只能处理手动输入的内容 - 大写字母的处理逻辑改成了先加标识再转小写,符合盲文的编码规则
- 加了
try-except块,防止遇到不在对照表中的字符导致程序崩溃 - 用
for char in s的方式遍历字符,比用索引遍历更简单直观
内容的提问来源于stack exchange,提问作者user3038515
相关产品推荐
相关产品推荐

