私はプログラムを書こうとしていますが、それで多くの問題を抱えています。手順は次のとおりです。このプログラムでは、いくつかの米国国勢調査データから単純なデータベースを作成します。データベースは、キーが州名で、値が 1900 年から 1990 年までの各年の人口のリストである辞書で構成されます。データベースを作成したら、プロンプトを表示する簡単なコマンド駆動型プログラムを作成します。州名と年のユーザーを作成し、その州のその年の人口を報告します。プログラムは、ユーザーが「q」または「Q」で始まる単語を入力するまでこれを行います。
国勢調査データはこちら: http://www.census.gov/population/www/censusdata/files/urpop0090.txt すべてを「データベース」という名前のフラット ASCII ファイルに保存しました。
時間をかけてファイルを調べてください。余分な情報が含まれています(少なくとも私たちの目的のために)。ファイルから必要な情報を正確に抽出してデータベース (辞書) に入れるための戦略を立てる必要があります。
必要な情報を説明するための私のパターンは次のとおりです。
行が 6 つのスペースで始まり、その後に大文字が続く場合、状態データを含む行があることがわかります。その行の後ろに 2 つのスペースが連続してある場合、州名の末尾を見つけることができます。
州データを含む行がある場合、その行の最初の総人口を見つけるには、文字 43 に移動し、1 つのスペースが見つかるまで戻ってください。
州データを含む行がある場合、文字 101 に移動し、1 つのスペースが見つかるまで戻ると、その行の 2 番目の総人口を見つけることができます。
州データを含む行がある場合、文字 159 に移動し、1 つのスペースが見つかるまで戻ると、その行の 3 番目の総人口を見つけることができます。
これは私がこれまでに持っているものです:
#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
キー/値を持つディクショナリを実際に作成する方法と、人口値を州名のキーに固定する方法を理解するのに苦労しています。また、ユーザー入力を取得してそれをキーとして使用する方法にも自信がありません。そこにあるコードが州名と人口の情報を適切に取得するかどうかもわかりません。
任意の提案/ヘルプをいただければ幸いです!