
在处理包含文本和数字的字符串时,我们经常需要从中识别出数字信息。尤其是在某些编程挑战中,数字可能以两种形式出现:直接的数字字符(如'1', '2'等)和英文拼写(如'one', 'two'等)。我们的目标是从每行文本中找出第一个和最后一个这样的数字,将它们组合成一个两位数,然后对所有这些两位数进行求和。
原始实现中存在两个主要问题:
为了解决上述问题,我们可以设计更通用、更高效的数字识别函数。这些函数将能够从字符串的开头或结尾识别出数字或其英文拼写形式。
首先,我们需要修正isdigit()的调用方式。其次,我们可以创建一个包含所有数字英文拼写的列表,然后通过遍历这个列表来检查字符串是否以某个数字词开头或结尾。这样可以大大简化if/elif结构。
def find_first_number(text_string):
"""
从字符串的开头查找第一个数字(数字字符或英文拼写)。
例如:"oneight" -> 1, "2abc" -> 2
"""
number_words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
# 遍历字符串,逐个字符检查
for i in range(len(text_string)):
current_substring = text_string[i:]
# 优先检查是否为数字字符
if current_substring[0].isdigit():
return int(current_substring[0])
# 检查是否为英文拼写数字
for value, word in enumerate(number_words):
if current_substring.startswith(word):
return value
return None # 如果没有找到任何数字,返回None
def find_last_number(text_string):
"""
从字符串的结尾查找最后一个数字(数字字符或英文拼写)。
例如:"oneight" -> 8, "abc2" -> 2
"""
number_words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
# 从字符串末尾开始向前遍历
for i in range(len(text_string) - 1, -1, -1):
current_substring = text_string[:i+1] # 每次截取从开头到当前位置的子串
# 优先检查是否为数字字符
if current_substring[-1].isdigit():
return int(current_substring[-1])
# 检查是否为英文拼写数字
for value, word in enumerate(number_words):
if current_substring.endswith(word):
return value
return None # 如果没有找到任何数字,返回None代码解析:
立即学习“Python免费学习笔记(深入)”;
有了高效的数字提取函数,我们可以将其整合到主程序中,处理文件中的每一行并计算总和。
def concatenate_numbers(num1, num2):
"""将两个数字拼接成一个整数"""
return int(f"{num1}{num2}")
def process_calibration_document(file_path):
"""
处理校准文档,提取每行的首尾数字并求和。
"""
total_sum = 0
try:
with open(file_path, 'r') as f:
for line in f:
line = line.strip() # 移除行尾的换行符和空格
if not line: # 跳过空行
continue
first_digit = find_first_number(line)
last_digit = find_last_number(line)
if first_digit is not None and last_digit is not None:
combined_number = concatenate_numbers(first_digit, last_digit)
total_sum += combined_number
else:
print(f"警告: 无法从 '{line}' 中提取首尾数字。")
return total_sum
except FileNotFoundError:
print(f"错误: 文件 '{file_path}' 未找到。")
return 0
except Exception as e:
print(f"处理文件时发生错误: {e}")
return 0
# 示例用法
if __name__ == "__main__":
document_path = 'textdocument.txt' # 确保文件存在且路径正确
final_result = process_calibration_document(document_path)
print(f"最终的校准总和为: {final_result}")注意事项与最佳实践:
通过对isdigit()方法的正确调用以及采用列表和循环来统一处理数字字符和英文拼写数字,我们成功地优化了从复杂字符串中提取数字的逻辑。这种改进不仅使代码更加简洁、易读,而且提高了其可维护性和效率。在实际开发中,理解并应用这些优化技巧,对于处理文本数据和解决类似的编程挑战至关重要。正确识别并修正代码中的细微错误,如方法调用遗漏括号,是提升编程技能的关键一步。
以上就是Python字符串中数字与英文数字的智能提取与高效求和教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号