ひとり勉強ログ

ITエンジニアの勉強したことメモ

3章 関数【退屈なことはPythonにやらせよう】

# 関数
def hello(): # 関数を定義
  print('Howdy!')
  print('Howdy!!!')
  print('Hello there.')

hello() # 関数の呼び出し
# パラメータのあるdef文
def hello(name):
  print('Hello ' + name)

hello('Alice')
hello('Bob')
# 戻り値とreturn文
import random

def get_answer(answer_number):
  if answer_number == 1:
    return '確かにそうだ'
  elif answer_number == 2:
    return '間違いなくそうだ'
  elif answer_number == 3:
    return 'はい'
  elif answer_number == 4:
    return 'なんとも。もういちどやってみて'
  elif answer_number == 5:
    return 'あとでもう一度聞いてみて'
  elif answer_number == 6:
    return '集中してもう一度きいてみて'
  elif answer_number == 7:
    return '私の答えはノーです'
  elif answer_number == 8:
    return '見通しはそれほどよくない'
  elif answer_number == 9:
    return 'とても疑わしい'

r = random.randint(1, 9) # 1から9までのランダムな整数
fortune = get_answer(r)
print(fortune)
# print()関数
# print()関数は渡された文字列の末尾に改行文字を自動的に追加する
print('Hello')
print('World')

# 改行を表示されないようにする
print('Hello', end='')
print('World')
# 複数の文字列をprint()に渡すと、文字列の間に1文字のスペースを自動的に追加する
print('cats', 'dogs', 'mice')

# キーワード引数のsepを使って、区切り文字を変更する
print('cats', 'dogs', 'mice', sep=',')
# ローカル変数はグローバルスコープから使えない
from errno import E2BIG

def spam():
  eggs = 31337
spam()
print(eggs)

実行結果:

NameError: name 'eggs' is not defined

# ローカルスコープでは他のローカルスコープの変数を使えない
def spam():
  eggs = 99
  bacon() #ローカルスコープ②が生成
  print(eggs)

def bacon():
  ham = 101 #ローカルスコープ②
  eggs = 0 #ローカルスコープ①とは別の変数

spam() #ローカルスコープ①が生成

実行結果:

99
# グローバル変数はローカルスコープから読むことができる
def spam():
  print(eggs) # グローンバル変数のeggsを参照する
eggs = 42
spam()
print(eggs)

実行結果:

42
42
# 同じ名前のローカル変数とグローバル変数
def spam():
  eggs = 'spam local'
  print(eggs) # 'spam local'を表示

def bacon():
  eggs = 'bacon local'
  print(eggs) # 'bacon local'を表示
  spam()
  print(eggs) # 'bacon local'を表示

eggs = 'global'
bacon()
print(eggs) # 'global'を表示

実行結果:

bacon local
spam local
bacon local
global
# global文
def spam():
  global eggs # eggsはグルーバル変数であることを定義
  eggs = 'spam' # グローバルスコープのeggsに代入される

eggs = 'global'
spam()
print(eggs)

実行結果:

spam
def spam():
  global eggs
  eggs = 'spam' # グローバル変数になる
 
def bacon():
  eggs = 'bacon' # ローカル変数になる

def ham():
  print(eggs) # グローバル変数になる

eggs = 42
spam()
print(eggs)

実行結果:

spam
# 例外処理
def spam(divide_by):
  return 42 / divide_by
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
ZeroDivisionError: division by zero
# tryとexcept文で例外を処理
def spam(divide_by):
  try:
    return 42 / divide_by
  except ZeroDivisionError:
    print('エラー:不正な引数です')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
21.0
3.5
エラー:不正な引数です
None
42.0
# 数当てゲーム
import random
secret_number = random.randint(1, 20)
print('1から20までの数を当ててください')
# 6回聞く
for guessses_token in range(1, 7): # 最大6回繰り返す
  print('数を入力してください')
  guess = int(input()) # 入力した文字列を整数値に変換

  if guess < secret_number:
    print('小さいです')
  elif guess > secret_number:
    print('大きいです')
  else:
    break # 当たり!forループから抜ける

if guess == secret_number:
  print('当たり!' + str(guessses_token) + '回で当たりました!')
else:
  print('残念。正解は' + str(secret_number) + 'でした。')

2章 フロー制御【退屈なことはPythonにやらせよう】

# if文
# 「Hello, world.」が1回表示されるのみ
spam = 0
if spam < 5:
  print('Hello, world.')
  spam = spam + 1
# while文
# 「Hello, world.」が5回表示される
spam = 0
while spam < 5:
  print('Hello, world.')
  spam = spam + 1
# 「あなたの名前」と入力しなければFalseにならない
name = ''
while name != 'あなたの名前':
  print('あなたの名前を入力してください')
  name = input()
print('どうも!')
# break文を使ってループを抜ける
while True: # 無限ループ
  print('あなたの名前を入力してください')
  name = input()
  if name == 'あなたの名前':
    break
print('どうも!')
# continue文
while True:
  print('あなたはだれ?')
  name = input()
  if name != 'Joe':
    continue # プログラムの実行がループの先頭に戻る
  print('こんにちはJoe。パスワードは何?(魚の名前)')
  password = input()
  if password == 'swordfish':
    break # whileループを抜ける
print('認証しました。')
# forループ
print('私の名前は')
for i in range(5):
  print('石川五右衛門(' + str(i) + ')')

# 同じ内容をwhileループで書く
print('私の名前は')
i = 0
while i < 5:
  print('石川五右衛門(' + str(i) + ')')
  i = i + 1
# 1から100までの数字をすべて足す
total = 0
for num  in range(101):
  total = total + num
print(total)
# sys.exit()関数を用いてプログラムを早期に終了する
import sys

while True:
  print('終了するにはexitと入力してください')
  response = input()
  if response == 'exit':
    sys.exit()
  print(response + 'と入力されました')

【php】エラーの種類

4種類あるphpのエラーについて。

Fatal error

致命的なエラー。このエラーが表示されている場合、phpはその段階で処理を中断する。

Parse error

構文エラー。このエラーは、phpの文法に誤りがある際に表示される。

Warning

警告。ファイルの呼び出しなどで、存在しないファイルを呼び出そうとした際に表示される。 このエラーがあってもプログラムは処理を続ける。

Notice

注意。定義されていない変数を使用しようとした際に表示される。 このエラーがあってもプログラムは処理を続ける。

【VBA】VBAでCSVデータをエクセルにインポートする

VBA を使用して CSV データをエクセルにインポートする。

インポートするCSVデータ

姓,名,生年月日,電話番号
田野,実,1996/7/13,08080178277
広沢,富夫,1961/7/29,09049538001
柿原,彩華,1956/6/10,08004909376
越田,育男,1993/4/22,09034977567
金,朱里,2012/8/24,09044098872
上川,朱音,2013/12/16,08017226344
江田,奈保子,1972/4/13,08029511515
日野,博,1997/5/21,08000061768
野沢,昭吾,2004/3/4,08002064324
喜田,美菜,1973/8/23,09003432471

文字コードShift_jis、改行コードは CR+LF。

3列目の生年月日は日付型、4列目の電話番号は先頭の「0」が欠けないよう文字型でインポートする。

VBAのコード

Sub Import()
  Dim buf As String, tmp As Variant, n As Long

  Open "csvのファイルパス" For Input As #1
  Line Input #1, buf
  Do Until EOF(1)
    Line Input #1, buf
    tmp = Split(buf, ",")
    n = n + 1
    Cells(n, 1).Value = tmp(0)
    Cells(n, 2).Value = tmp(1)
    Cells(n, 3).Value = DateValue(tmp(2))
    With Cells(n, 4)
      .NumberFormat = "@"
      .Value = tmp(3)
    End With
    Loop
  Close #1
End Sub