Python中如何打印new_text变量并实现tkinter文本框字母转对应序号
实现方案与代码修正
现有代码问题梳理
- 代码缩进不规范,Python对缩进要求严格,函数内部逻辑需要保持相同缩进层级,否则会触发语法错误
alphabet_position函数仅完成定义,没有实际调用,转换逻辑不会执行str.lower()方法不需要传入参数,text.lower(source_text)为错误用法,直接对目标字符串调用即可- 循环内每次替换就打印
new_text会输出大量中间过程,不符合输出最终结果的需求 - 手动定义字典效率较低,可通过ASCII码计算简化逻辑
完整可运行代码
from tkinter import * # 初始化窗口与组件 root = Tk() text_box = Text(root) text_box.pack() def enter(): # 从文本框读取全部内容 source_text = text_box.get(1.0, END) def alphabet_position(text): new_text = "" for char in text.lower(): # 仅处理字母字符 if char.isalpha(): # ord('a') = 97,减96即可得到a/A对应1的结果 new_text += str(ord(char) - 96) + " " # 去除末尾多余空格 return new_text.strip() # 调用转换函数得到结果 converted_result = alphabet_position(source_text) # 行内打印最终结果到控制台 print(converted_result) # 按钮绑定点击事件 btn = Button(root, text = "Enter", command = enter) btn.pack() root.mainloop()
如果你需要保留原字典实现的逻辑,替换alphabet_position函数为以下内容即可:
def alphabet_position(text): char_map = {'a':'1','b':'2','c':'3','d':'4','e':'5','f':'6','g':'7','h':'8','i':'9','j':'10','k':'11','l':'12','m':'13','n':'14','o':'15','p':'16','q':'17','r':'18','s':'19','t':'20','u':'21','v':'22','w':'23','x':'24','y':'25','z':'26'} lower_text = text.lower() new_text = "" for char in lower_text: if char in char_map: new_text += char_map[char] + " " return new_text.strip()
内容的提问来源于stack exchange,提问作者Derek Neilson
相关产品推荐
相关产品推荐

