Python3で作るアンケートフォーム【応用編】
2015/11/04
Python3で作った、超簡単アンケートフォームをfunctionを用いて改造します。
Python3の理解に役立てたら光栄です。
def main(): print('以下の質問に答えてください') shitsumonArray = ['あなたの名字はなんですか? ','あたなの名前はなんですか? ','IDをいれてください ','あなたの年齢はなんですか '] writeToFile(getUserInput(shitsumonArray)) def getUserInput(hikisu): shitsuArray = hikisu kotaeArray = [] for i in range(len(shitsuArray)): kotaeArray.append(input(shitsuArray[i])) return kotaeArray def writeToFile(hikisu): kaito = hikisu moji = 'ID:%s nあなたは%s%s。%s才です。'%(kaito[2],kaito[0],kaito[1],kaito[3]) print(moji) file = open(kaito[2]+'.txt','w') file.write(moji) file.close() main()
【超簡単】Python3でアンケートフォーム作ってみたで紹介したform.pyと動作内容的には、出力形式を除いて同一です。
では、どうして一体こんなややこしい書き方をするのか一つ一つ読んでみます。
def main():
でクラスmain()を定義を宣言します。
クラスは作ろうと思えばいくらでも作れます。
無駄なく最適なクラス分けも重要なスキルだと熟々思います。
今回はmain(), getUserInput(),writeToFile()の3クラスつくりました。
print('以下の質問に答えてください')
Python3ではprint(),Python2ではprintです。私は3をつかいます。
shitsumonArray = ['あなたの名字はなんですか? ','あたなの名前はなんですか? ','IDをいれてください ','あなたの年齢はなんですか ']
質問を配列の中に入れます。配列とは、[]の中に順序よく複数のオブジェクトを入れることができます。カンマで区切ります。
こうすることにより、質問の数が膨大になったときでも、簡単に対処ができるようになります。
writeToFile(getUserInput(shitsumonArray))
質問を配列getUserInputクラスに渡し、それをwriteToFileクラスに渡してます。
def getUserInput(hikisu):
getUserInputクラスは質問を引数として受け取り、ユーザーに質問し、答えを配列の中に入れてリターンしてくれます。
変数はクラスの中のみなので(グローバル変数以外)、他のクラスに受け渡しが必要となる場合、引数を使います。
引数は何個でも問題ありません。
shitsuArray = hikisu
変数shitsuArrayに引数をつがせます。
kotaeArray = []
質問の回答用の配列を初期化します。初期化しないと、存在しないとエラーログがでます。
for i in range(len(shitsuArray)):
パイソンのループ文の型です。覚えましょう。for 変数 in range():今回はrange()にshituArrayの配列の長さ(中のオブジェクトの個数)を入れてます。
たとえば、質問が100問あったら、form.pyでは100行の質問と100行の答えになりますが、これなら少しですね。
kotaeArray.append(input(shitsuArray[i]))
iは0から始まります。shitsuArray[0]つまり、一番最初の質問が、input()関数によってディスプレイに表示されます。
そして、その入力結果は、配列についてる関数の.append()に引き渡されて、回答用の配列に入ります。
return kotaeArray
ループが終わったら、できた配列をリターンします。
def writeToFile(hikisu):
writeToFileはgetUserInputクラスからリターンされた回答用配列を引数として受け取ります。
そして、フォーマットしてファイルに書き込みます。
kaito = hikisu
引数を受け取ります。
moji = 'ID:%s nあなたは%s%s。%s才です。'%(kaito[2],kaito[0],kaito[1],kaito[3])
クォーテーションの中にある%sは、%()の中の物の順序に呼応して、置き換えられます。
nは改行の印です。
print(moji)
コンソールにできた文字列を表示します。
file = open(kaito[2]+'.txt','w')
file.write(moji)
file.close()
このあたりは、前回と一緒ですね。
<pre class="lang:python decode:true" title="form.py">def main():
print('以下の質問に答えてください')
myoji = input('あなたの名字はなんですか? ')
namae = input('あたなの名前はなんですか? ')
subjectID = input('IDをいれてください ')
toshi = input('あなたの年齢はなんですか ')
moji = subjectID+':'+myoji+' '+namae+' '+toshi+'才'
print(moji)
file = open(subjectID+'.txt','w')
file.write(moji)
file.close()
print('ありがとうございました')
min()</pre>
シンプルだったフォームがずいぶん複雑になりましたね。
クラス分けは、繰り返しが多い場合に非常に有効です。
また、各作業ごとにわけることによって、後々の開発のしやすさも出てきます。
次回は複雑なフォームを、クラスを使ってシンプルにします。