我想接受命令行上提供的或从文件中读取的 2d 点。命令行位置参数输入示例:
( 4,-1),(0, 0) , (3,3)
示例 CSV 文件
4, -1
0,0
3 ,3
即“大括号外的逗号”和“换行符”是两种可能的分隔符。我可以看到前面有 3 条路:
csv
对于这样一个简单的用例来说似乎有点过度设计,是真的吗?)C
方式 - 将字符串送入状态机这主要是一个概念性问题,因此任何“这是一个愚蠢的问题”或“这是一个 AB 问题”的批评比代码更受欢迎。
使用正则表达式可能是最简单的。
你首先需要加强语法的定义。大括号中的对只允许在标准输入中吗?可以混合吗?
这里是括号对的方法:
import re
command_line="( 4,-1),(0, 0) , (3,3)"
int_pairs1=[]
for pp in re.split(r'(?<=\))[ \t]*,[ \t]*(?=\()', command_line):
if ',' in pp:
int_pairs1.append(list(
map(int, re.sub(r'\(\s*|\s*\)', "", pp).split(',',1) ) ) )
另一个文件示例:
file_in='''\
4, -1
0,0
3 ,3
'''
int_pairs2=[]
for pp in (l.strip() for l in file_in.splitlines()):
if pp.strip() and ',' in pp:
int_pairs2.append(list(map(int, pp.split(',',1) ) ) )
它们用各自的输入产生相同的输出:
>>> int_pairs1==int_pairs2
True
尝试将组成部分转换为 int 会引发异常。