モナーのパイソンでゴーゴー

湘南あたりの海辺より

(*´ω`)数学的な処理はimport math を使う

【実行結果】

f:id:ririruby:20200430134523j:plain

【解説】

まず数学的な処理をするのでimport mathをします。

円周率を表示するのでmath.piをします。

小数点切り捨てはmath.flootです。

小数点切り下げはmath.ceilです。

 

【コード】

import math
#
print('円周率は{}です'.format(math.pi))
#
print('小数点以下を切り捨てれば{}です'.format(math.floor(math.pi)))
#
print('小数点以下を切り上げれば{}です'.format(math.ceil(math.pi)))

print(' ∧ ∧  日々努力')
print('( ゚Д゚)')
print('海と猫が好き')

(*´ω`)withを使い処理が終了したらすぐにファイルを閉じる

【実行結果】

f:id:ririruby:20200429132456j:plain

f:id:ririruby:20200429132517j:plain

【解説】

withを使うことにより処理が終了したらすぐにファイルを閉じるようにする

 

【コード】

#入力する
text =input('何を記録しますか?>>')
#diary.txtを新規に作成する。追記で。処理が終わったらファイルをすぐ閉じる
with open('diary.txt','a') as file:
  file.write(text + '\n')

print(' ∧ ∧  GWは何をするかなあ')
print('( ゚Д゚)')
print('海と猫が好き')

 

(*´ω`)一行日記を作る

【実行結果】

f:id:ririruby:20200428174500j:plain

 

f:id:ririruby:20200428174521j:plain

【解説】
プログラムから日記を入力するとnikki.txtに追記していくプログラム
'a'が追記で \nが改行を表す。
 
【コード】
#入力する
text =input('何を記録しますか?>>')
#nikki.txtを新規に作成する。追記で。
file = open('nikki.txt','a')
#ファイルに書き込み改行する
file.write(text + '\n')
#ファイルを閉じる
file.close()
 
print(' ∧ ∧  GWは何をするかなあ')
print('( ゚Д゚)')
print('海と猫が好き')

(*´ω`)str型は不変なので新しくidentityができあがる

【実行結果】

f:id:ririruby:20200427175214j:plain

【解説】

まずはリストを空にしておき、そこに松田を追加する。

その前後のidentityは同じ。つまり変更がかかるということ。

次に文字列を松田からスーパー松田にすると

その前後のidentityは異なる。つまり新しい物ができたということ。

従ってリスト型は中身が変更できてしまうため変更前の状態が

変更後の状態になってしまう。たとえば変更前はさんがついていないのに

変更後は変更前のものもさんが付いているなど。

str型の場合は、中身が不変型なので新しい物ができる。そのため

変更前の物は残っており、きちんとさんがつかない状態で表示される。

【コード】

#リストの場合
names = list()
print('変更前のリストの内容:{}'.format(names))
print('変更前のlistのidentity:{}'.format(id(names)))
names.append('松田')
print('変更後のリストの内容:{}'.format(names))
print('変更後のlistのidentity:{}'.format(id(names)))

#文字列の場合
name = '松田'
print('変更前の文字列の内容:{}'.format(name))
print('変更前のstrのidentity:{}'.format(id(name)))
name = 'スーパー' + name
print('変更後の文字列の内容:{}'.format(name))
print('変更後のstrのidentity:{}'.format(id(name)))
 
print(' ∧ ∧  新型コロナは人が作ったかもな')
print('( ゚Д゚)')
print('海と猫が好き')

 

(*´ω`)一度、コピーで退避すれば大丈夫なんだよ

【実行結果】

f:id:ririruby:20200426153143j:plain

【解説】

一度, before_namesを  copies_nameにコピーしておいて copies_nameを

関数に投入することでbefore_namesを手つかずのままにする。

そうすることによってbefore_nameはさんがつかない状態になる。

【コード】

# 名前に、さんを付けする関数
def add_suffix(names):
    for i in range(len(names)):
        names[i] = names[i] + 'さん'
        return names
#名前
before_names = ['松田','浅木','工藤']
#copied_namesを初期化する
copied_names = list()

#copied_namesへbefore_namesを追加してゆく
for n in before_names:
    copied_names.append(n)

#名前を関数に投入
after_names = add_suffix(copied_names)

#after_names表示
print('さん付け後:' + after_names[0])

#before_names表示
print('さん付け前:' + before_names[0])
 
print(' ∧ ∧  GWは閉じこもるしかなさそうだ')
print('( ゚Д゚)')
print('海と猫が好き')
 

 

(*´ω`)returnですでに変わっている。

【実行結果】

f:id:ririruby:20200425150435j:plain

【解説】

before_namesを呼び出し、さんを付ける関数に投入し、その結果を
after_namesに代入しているわけだが、before_namesを表示すると
さんになっている。(after_namesと同じになっている)のはなぜか?
 
解答としてはbefore_namesのidentityを関数に渡した時点で、さん付けに
なっておりその答えをreturanしている。この時点でbefore_namesはさん
付けになっている。それをafter_namesに代入しているため、after_names
は、さん付けになっている。従って両者を表示しても、両方ともさん付けになる。
 
【コード】
# 名前に、さんを付けする関数
def add_suffix(names):
    for i in range(len(names)):
        names[i] = names[i] + 'さん'
        return names
#名前
before_names = ['松田','浅木','工藤']
 
#名前を関数に投入
after_names = add_suffix(before_names)

#after_names表示
print('さん付け後:' + after_names[0])

#before_names表示
print('さん付け前:' + before_names[0])
 
print(' ∧ ∧  天才でない限り努力は絶対に必要です')
print('( ゚Д゚)')
print('海と猫が好き')
 

(*´ω`)コピーはidentityをひとつにしてしまうため・・・

【実行結果】

f:id:ririruby:20200424200004j:plain

【解説】

scores1とscores2があってこの時点ではそれぞれのidentityは異なっている。

ところがscores1 = scores2 とすることによってidentityは同じになってしまう。

そしてscores1[0]に90を代入する。ところがscores2もscores1と同じidentityに

なっているため、指し示すデータはひとつのみ。しったがってscores2[0]も

90になるということだ。

 

【コード】

#identityの相違がある 
scores1 = [80, 40, 50]
scores2 = [80, 40, 50]
print('scores1の先頭要素は{}'.format(scores1[0]))
print('scores2の先頭要素は{}'.format(scores2[0]))
#identityのコピー(ここでidentityは同じになってしまう。つまりidentityはひとつになる)
print('変数scores2の中身をscores1に代入(コピー)します')
scores1 = scores2
 
#score1[0]を90に変更したがidentityは一つのままになっている
print('scores1の先頭要素を90に書き換えます')
scores1[0] = 90

#実際2つに見えるが同じidentityを見にいっているので当然同じ内容になってくる
print('90を代入した scores1の先頭要素は{}'.format(scores1[0]))
print('90を代入していない scores2の先頭要素は{}'.format(scores2[0]))

print(' ∧ ∧  モナーはシステム解析家')
print('( ゚Д゚)')
print('海と猫が好き')