科学の箱

科学・IT・登山の話題

Python

automated the boring – day 2

投稿日:2018年2月7日 更新日:

今日は簡単なUser認証のプロトタイプといえば恰好はよいが、

  1. パスワードの入力
  2. パスワードの突き合せ
  3. パスワードつきあわせの結果によりメッセージを変える

name = 'Mary'
password = input()
# password = 'Pass'
if name == 'Mary':
  if password == 'Pass':
    print ('access granted')
  else:
print ('access denied')

 

しょぼいプログラムではあるが、パスワード認証のロジックはこれすべてこれである。nameをコードに直接書き込んでいる。これをICカードで名前を読み取るようにする。input()をいまコンソールからキーボード入力としているが、ここを網膜認証のセンサーと組み合わせて、passwordに網膜画像データを取り入れる。パスワードのつきあわせをデータベースに登録したデータと照らし合わせる。この時に画像データだからある程度の揺れを考慮してあげる。最後のprintのところではドアのセキュリティと連動させれば、これで網膜認証によるアクセスコントロールの出来上がり。

次はループ。面倒くさいのでサンプルのみ

こちらはデバッグなどに使えるループに入っていることを確認するためにループに入るたびにコンソールに文字列を出力


spam = 0
while spam < 5:
  print ('Hello')
spam = spam + 1

次に名前入力を求める。ユーザーが何も入力しない場合には無限回廊から抜け出せない。


name = ''
while name == '':
  print ('Please type your name')
name = input()

print ('Hello ' + name)

下記はwhile Trueを利用したバージョン。どの言語でもいえるがどちらのステートメントが良いかは実際問題としてコンパイル後のコードがどのようになっているかによる。自分の経験だとbreakを使って明示的にループから抜け出すほうが実行コードに無駄がない気がする。


name = ''
while True:
  print ('Please type your name')
  name = input()
  if name != '':
    break

print ('Hello ' + name)

次はforバージョン、ついでに数字の文字列変換とランダム値の生成。数字でコントロールする場合、あるいは文字列トークンを使う場合にはforがwhileより使いやすいが、python1ではどうだろうか。


import random
for num in range(5):
  print ('count' + str(num))
  print ('randome' + str(random.randint(1, 10)))

数字の変換はお約束でstr(), ちなみに逆はint()。int()は失敗するとfalseを戻すので数字形式のチェックにも使える。こんな感じか if int(target) :。

ランダム値の生成はrandom.randintで簡単に取得できる。その前にライブラリをimportで読み込むこと。

いよいよ関数呼び出し。まずは簡単なところで。テキストをパラメータで送ってコンソールに出力。関数の定義はdefで行う。


def Hello(name):
  print(name)

Hello('AAA')
Hello('BBB')
Hello('CCC')

パラメータを送ったら今度は戻り値を取得してみる。戻り値はreturnによりメインロジックに戻せるわけだが、変数の型はあまり気にしていないようだ。コンパイル時エラーが期待できないとなると、処理に自分で組み込む必要がある。これは少々めんどうくさい。


import random
def translate(p_value):
  if p_value == 1:
    return ('this is one')
  elif p_value == 2:
    return ('this is two')
  else:
    return ('this is three')

print translate(random.randint(1,3))

さてここまでは主にフローコントロール。プログラミングの処理を分岐、繰り返す構文について勉強した。次に出てくるのがList。これが業務アプリケーションではあまり使わないがRの経験を思い出すとやたらListを使っていた記憶がある。Listについては基本操作~応用まで大体利用パターンが決まっているのでとりあえずまとめて実行


#基本操作

spam_x = ['cat', 'dog', 'moose']
print(spam_x[0])
print(spam_x[0:2])
print(len(spam_x))

# 代入

spam_x[0] = 'blackcat'
print(spam_x[0])

# 結合

spam_y = ['elephant', 'penguin']
print(spam_x + spam_y)

# 削除

del spam_x[2]
print spam_x

# 繰り返し
spam_z = spam_x + spam_y
for i in range(len(spam_z)):
  print 'Index ' + str(i) + ' in spam_z is: ' + spam_z[i]

# つきあわせ

print ('please enter animal name')
animal = input()
if animal not in spam_z:
  print 'we do not have.'
else:
  print 'Yes we have'

 

リストの第二弾


# index search
spam = ['hello', 'hi', 'howdy', 'heyas']
print (spam.index('hi'))

# add item into list
spam = ['cat', 'dog', 'bat']
spam.append('elephant')
print(spam)

# add list item in specified location
spam.insert(2, 'penguin')
print(spam)

# remove item from list
print(spam)
spam.remove('dog')
print(spam)

# sort
spam.sort()
print(spam)
spam.sort(reverse=True)
print(spam)

Listと似た型にtupleがある。表記上、[] と ()を使う違いがあるが、使う上で決定的に違うことがひとつある。Listは変更可能であり、tupleは変更不可能。たとえばListにはトランザクションデータを記録し、tupleにはマスターデータを登録する。

さらにDictionaryを取り扱う。listとtupleはindexは数字のみであったが、dictioaryはindexは数字ではない。またdictionaryでは順番は関係がなくなり、keyとvalueの組み合わせで一つのitemが構成される。


# list comparison #
spam = ['cats', 'dogs', 'moose']
bacon = ['dogs', 'moose', 'cats']
print (spam == bacon)

# dictionary comparison #
eggs = {'cat' : 'this is cat', 'dog' : 'this is dog', 'moose' : 'this is moose'}
ham = {'dog': 'this is dog', 'moose' : 'this is moose', 'cat' : 'this is cat'}
print (eggs == ham)

# get all of keys
for k in eggs.keys():
print('key:' + k)

# get all of value
for k in eggs.values():
print('value:' + k)

# check existence of key and value.
print('cat' in eggs.keys())
print('penguin' in eggs.keys())

print('this is dog' in eggs.values())
print('this is elephant' in eggs.values())

# retrieve data with key.
print('cat:' + eggs.get('cat'))

メタ情報

inarticle



メタ情報

inarticle



-Python
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

配列のインデックス

インデックスとは配列に対して[]で要素を抜き出す方法である。 マニュアルは以下になる。 Indexing Indexing Routines インデックスの方法としては以下がある。 整数値を使ったイン …

no image

pythonからoffice365 smtpを利用してメールを送信

Office365の設定はこちらにある。 PythonにおけるSMTPの利用はこちらにある。 下記はサンプルコード import smtplib from email.mime.text import …

no image

kaggle Titanic Tutorial – 2

決定木を利用して分析する。 データの作成 y_train = d_train["Survived"].values x_train = d_train[["Pclass& …

no image

pyplotでグラフを表示

matplotlib.pyplotを利用すると、配列からお手軽にグラフを作成できる。 内容 最もシンプルなグラフ タイトル ラベル、レジェンドを追加 線の種類を変える 最もシンプルなグラフ まずはpy …

no image

automated the boring – day8

https://automatetheboringstuff.com/chapter15/ さてプログラムを実行しているときに案外出てくる要件が時間計測。 例えばアルゴリズム間でパフォーマンスを比較す …

2018年2月
« 1月   3月 »
 1234
567891011
12131415161718
19202122232425
262728  

side bar top



アーカイブ

カテゴリー