【发布时间】:2014-04-09 18:33:15
【问题描述】:
我正在尝试编写一个程序,但遇到了很多麻烦。这是我的指示: 对于这个程序,您将从一些美国人口普查数据创建一个简单的数据库。该数据库将包含一个字典,其键是州名,其值是从 1900 年到 1990 年每一年的人口列表。创建数据库后,您将编写一个简单的命令驱动程序,该程序将提示用户输入州名和年份,然后报告该州该年的人口。您的程序将执行此操作,直到用户键入任何以“q”或“Q”开头的单词。
人口普查数据在这里:http://www.census.gov/population/www/censusdata/files/urpop0090.txt 我已将所有内容保存到一个名为“数据库”的平面 ascii 文件中
花一些时间研究文件。它包含一些多余的信息(至少出于我们的目的)。您需要制定一种策略,从文件中准确提取您需要的信息以放入数据库(字典)中。
以下是我描述所需信息的模式:
当该行出现时,您可以告诉您有一条带有状态数据的行 以 6 个空格开头,后跟一个大写字母。你可以 后面连续有两个空格的时候找到州名的结尾 在那一行。
如果你有一行包含状态数据,你可以找到第一个 通过转到字符 43 然后备份该行的总人口 直到找到一个空格。
如果你有一行包含状态数据,你可以找到第二个 通过转到字符 101 然后备份该行的总人口 直到找到一个空格。
如果你有一行包含状态数据,你可以找到第三个 通过转到字符 159 然后备份该行的总人口 直到找到一个空格。
这是我目前所拥有的:
#gets rid of commas in the populations
def convert_string_to_number( comma_string ):
number = comma_string.replace(",","")
parts = number.split(".") # check for a decimal point
if len(parts) == 1 and parts[0].isdigit(): # we really have an integer
number = float(parts[0])
elif len(parts) == 2 and parts[0].isdigit() and parts[1].isdigit(): #float
number = float (parts[0] + "." + parts[1])
else:
number = None
return number
def getsub(str, endindex):
sublist = str[:endindex].split(' ')
substring = sublist[-1]
return substring
def main():
data = open('database', 'r')
lines = data.readlines()
for line in lines:
# Now do the line processing.
if line.startswith(' '):
# Now process the state data
firsttotalpop = getsub(line, 42)
secondtotalpop = getsub(line, 100)
thirdtotalpop = getsub(line, 158)
return 0
我在弄清楚如何实际创建带有键/值的字典,以及如何让人口值与州名的键保持一致时遇到了一些麻烦。另外,我不肯定如何接受用户输入并将其用作键。我也不确定上面的代码是否正确获取州名称和人口信息。
任何建议/帮助将不胜感激!
【问题讨论】:
-
您的问题到底是什么?即,您在哪里遇到了麻烦。感谢您的编辑,请稍等。
-
修复已发布代码的缩进也会有所帮助。
-
wat...lol 编辑怎么了。
标签: python dictionary key readlines