<p>由于这个问题表明了学习编码的强烈愿望,并且已经尝试过一些东西,所以我提供了一个适用于pythonversion3的变体(在版本2中,需要原始的输入而不是输入,以及将来的导入来声明print函数):</p>
<pre><code>#! /usr/bin/env python3
import sys
names_known = ( # Hints 1 and 2
None, "tp.txt", "c17testpat.pat", "c432test.pat",
"c499testpat.pat", "c1355testpat.pat", "c6288testpat.pat")
options_map = dict(zip(range(len(names_known)), names_known)) # 3
print("Enter:")
for choice, name in enumerate(names_known[1:], start=1): # 4
print('%d.%s' % (choice, name))
user_choice = input("Enter a number") # 5
try: # 6
entry_index = int(user_choice)
except:
sys.exit("No integer given!")
if not entry_index or entry_index not in options_map: # 7
sys.exit("No filename matching %d" % (entry_index,))
with open(options_map[entry_index]) as f: # 8
# do something with f
pass
</code></pre>
<p>很多事情还是会出错的,任何错误都需要用户重新启动(没有while循环等),但是有些成绩</p>
<ol>
<li>只存储一次名称(这里我选择了一个元组)</li>
<li>将1作为用户界面中的第一个数字(在索引0处插入虚拟对象)</li>
<li>从存储名称的元组派生dict(dict提供快速查找)</li>
<li>从名称元组构建用户界面信息(忽略虚拟)</li>
<li>将输入与验证分开</li>
<li>首先检查域类型(整数)。如果失败,提前退出系统出口并提供信息</li>
<li>请检查域成员身份,否则退出并显示信息</li>
<li>在上下文块中打开资源文件名目标,以便在处理完成后不要忘记关闭</li>
</ol>