VBA別館・Python別館

41077
名前
件名
メッセージ
画像
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

有名俳句学習ソフト - Tak

2019/02/24 (Sun) 15:29:33

冗句俳句作成ソフトに続いて、今度はエクセルのお勉強ソフトを作りました。

有名俳句を200句集めて、俳句・作家・季節を表示するものです。

① 出来上がりの図を見てください。

エクセルで作ってますが、エクセルのシートが見えないようになっております。



② まずエクセルシ-トの方の作り方を書きます。

・エクセルのシートに200句、作者、季節を入れます(ネットにいくらでも転がっております)。

・マクロで乱数に合わせて、一句のみを表示します。
作者・季節は3秒遅れで表示するのが、クイズ的でいいかな思っています。
・そのマクロは次のようなものです。 余りにも簡単で気抜けしますね。
-------------------------

Option Explicit

Dim ran As Integer

Private Sub CommandButton1_Click()
 ran = WorksheetFunction.RandBetween(1, 200)
 Range("F1") = ran

 Cells(1, 7) = Cells(ran, 2)
 Cells(1, 8) = Cells(ran, 3)
 Cells(1, 9) = Cells(ran, 4)

 TextBox1.Value = Cells(1, 7).Value
 TextBox2.Value = ""
 TextBox3.Value = ""

 '3秒間処理を中断する
 Application.Wait Now + TimeValue("00:00:3")
 TextBox2.Value = Cells(1, 8).Value
 TextBox3.Value = Cells(1, 9).Value
End Sub

-------------------------------------------

’「終了ボタン」
Private Sub CommandButton2_Click()
 Dim book As Workbook
 For Each book In Workbooks
  book.Save
 Next
 Application.Quit
End Sub

’sheet上のXでは「終了ボタン」へ誘導
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = vbFormControlMenu Then
   MsgBox "[終了]ボタンを使用してください"
   Cancel = True
 End If
End Sub

引越しのお知らせ - Tak

2019/02/22 (Fri) 08:57:52

新しいサイトを独自ドメインで新築いたしました。

名付けてシニア別館(kumasan.com)です。 ここには今のところ、「カメラ別館」「vba別館」「Python別館」「PC別館」「なんでも別館」の六つの別館があります。

https://kumasan.com

重複記事もありますが、お手すきの時にでも、お寄りいただければ幸いです。

有難うございました。

VBA 自動俳句(冗句)作成ソフト - Tak

2019/02/04 (Mon) 11:19:15

ついにイグノーベル賞ものの、自動俳句作成ソフトが完成しました。

① 冗句作成ソフト完成

やっていることは、有名古典俳句200句の上五・中七・下五をバラバラにして、乱数でそれぞれをgetして、一つの俳句にしているのです。

意味不明の冗句ができるころが面白い。 誰の句だったかとな、少し考えさせるところが教育的ではあります。

俳句を嗜んでいる方なら、誰と誰の句だと分かるかもしれません。

まずは図をご覧ください。

Re: VBA 自動俳句(冗句)作成ソフト - Tak

2019/02/04 (Mon) 11:39:32

② VBA code

・全部をvbaで書くと大変なので、エクセルで多少の処理を行って置きその結果のみをUserformで表示してます。 お遊びアプリなので簡単にいきましょう(って、それしかできない。)

・このサイトでは、codeのindentは無視されるのでそのままにしてあります(Pythonではerrorとなりますが)。


----------------------------

Private Sub CommandButton1_Click()


Range("H3:J19").Value = "" '前のデータを消しておく
Range("L3:L102").Value = ""
Range("H3:J7").Font.ColorIndex = 1

For m = 0 To 4


reDo: '季語なしや季語重なりの場合はやり直し用の乱数を発生する


n = 200


rnd1 = WorksheetFunction.RandBetween(1, n) + 2 '乱数と行番号を合わせる
rnd2 = WorksheetFunction.RandBetween(1, n) + 2
rnd3 = WorksheetFunction.RandBetween(1, n) + 2

'乱数の確認のためセルに書き出す
Cells(9 + m, 8).Value = rnd1
Cells(9 + m, 9).Value = rnd2
Cells(9 + m, 10).Value = rnd3


'季語の赤字のindexを調べる。3なら季語。
Cells(15 + m, 8).Value = Cells(rnd1, 2).Font.ColorIndex
Cells(15 + m, 9).Value = Cells(rnd2, 3).Font.ColorIndex
Cells(15 + m, 10).Value = Cells(rnd3, 4).Font.ColorIndex

Cells(3 + m, 8).Value = Cells(rnd1, 2).Value '上五, Cells(3, 8)はRange("H3")と同じです。
Cells(3 + m, 9).Value = Cells(rnd2, 3).Value '中七, Cells(3, 7)はRange("I3")と同じです。
Cells(3 + m, 10).Value = Cells(rnd3, 4).Value '下五, Cells(3, 8)はRange("J3")と同じです。

'季語が一つ有れば良し、ないか二つ以上あればやり直しする
If Cells(15 + m, 8) + Cells(15 + m, 9) + Cells(15 + m, 10) = 5 Then
'MsgBox "季語は合格"
Else
'MsgBox "季語不合格、もう一度"
GoTo reDo '最初に戻る
End If

If Cells(15 + m, 8) = 3 Then Cells(3 + m, 8).Font.ColorIndex = 3
If Cells(15 + m, 9) = 3 Then Cells(3 + m, 9).Font.ColorIndex = 3
If Cells(15 + m, 10) = 3 Then Cells(3 + m, 10).Font.ColorIndex = 3


'ここからuserformへの転記を行う。

TextBox1.Text = Cells(3, 8).Value & Cells(3, 9).Value & Cells(3, 10).Value
TextBox2.Text = Cells(4, 8).Value & Cells(4, 9).Value & Cells(4, 10).Value
TextBox3.Text = Cells(5, 8).Value & Cells(5, 9).Value & Cells(5, 10).Value
TextBox4.Text = Cells(6, 8).Value & Cells(6, 9).Value & Cells(6, 10).Value
TextBox5.Text = Cells(7, 8).Value & Cells(7, 9).Value & Cells(7, 10).Value


Next

'第一句の上5、中七、下5の俳人の名前を表示する
Dim k As Integer '上5の最終行

k = Cells(9, 8).Value
Cells(22, 8).Value = Cells(k, 14).Value

k = Cells(9, 9).Value
Cells(22, 9).Value = Cells(k, 14).Value

k = Cells(9, 10).Value
Cells(22, 10).Value = Cells(k, 14).Value

'第一句の作者表示
TextBox9.Text = Range("H22").Value
TextBox10.Text = Range("I22").Value
TextBox11.Text = Range("J22").Value


End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub UserForm_Initialize()
Label7.Caption = Date
End Sub

独自ドメイン移転 - Tak

2019/01/28 (Mon) 10:29:54

20年以上前に、米国で登録した@kumasan.comを日本のドメイン管理会社へ移転するまでの経緯をお話いたします。

① 移転に際しやるべき項目

・日本のドメイン会社選択
・そこへ移管依頼
・米国の管理会社へ転出依頼を出す
・そこからOKを貰い、日本の管理会社へ連絡する
・日本の管理会社から、米国へ移管手続きの連絡が行く
・米国の会社から、その依頼の信憑性確認が来るーOKする
・レンタるサーバーを契約し、mail配信の設定を行う
・サイト(ブログ含む)を構築する

と、やることが満載してました。 まだ最終的なサイトは立ち上がっておりませんが、参考までに経過を書いてみます。 

Re: 独自ドメイン移転 - Tak

2019/01/28 (Mon) 10:46:41

② 何故移転するか?

mailの送受信だけなら、そのままでよかったのですが、写真やPython関連の思い付きを残しておきたいので、サイトを立ち上げたかった、というのが直接の理由でした。

そうするとサイトを米国の管理会社のサーバーを契約しなければならず、年から言っていつまで続けられるかも不明なので、やはり日本語の通じる日本のレンタルサーバー上でサイト運営をしたかったわけです。

日本のレンタル会社は沢山ありますが、巷の評判からXserverでサーバーをレンタルすることに決めました。

理由は、
・独自ドメインの移管OK
・サーバー使用料が他社より高額ですが、サーバーへの接続が他よりかなり早い
・ブログに適したWordPressの自動インストール機能がある
・サポートの評判も良い
などなどです。

Re: 独自ドメイン移転 - Tak

2019/01/29 (Tue) 20:38:04

③ 日本のドメイン移転先をXserverとした

・理由は先に書いた通りですが、そこのサイトの「ドメイン移管申請」へ入り、「kumasan.com」の移管をしたいと入れる。

・すると現在のドメイン管理会社から、移転許可番号みたいな「Auth Code」を入手して下さいと言われる。

・次に米国のドメイン管理会社(Network Solutions)のサイトへ入り、「Auth Code」取得の依頼をする。 3回目の要求でやっとそれをmailで入手する(この会社はその辺のサービスについては評判が悪い)。

・入手したAuth codeをXserverにenterし、手数料の支払いを済ませる。 

・その後二三回Xserver、Networkとやり取りをし、20日後にXserverが「kumasan.com」の管理権を取得できた。

・kumasan.comの保有者、管理会社などは「Whois」というドメイン総合管理機構で確認ができた。

これででやっとkumasan.comという独自ドメインの管理がXserverに移ったので、次にmail配信のためのメールサーバーをレンタルし、dnsサーバーの設定をする必要があります。

Re: 独自ドメイン移転 - Tak

2019/01/30 (Wed) 10:28:38

④ Xserverでサーバーをレントする

X10と言う最小のサーバーを契約した。 

・サーバーキャンペーンをしていたので、契約したら独自ドメイン(kumasan.net)が貰えた。 このdomainは更新料もfreeと言うおまけでした。 因みに今回移転したkumasan.comは移転手数料+年間管理費用で¥5,000位の出費でした。

・独自ドメインの移転は済んだけれど、サーバーのmail配信設定が面倒でした(慣れれば大したことではないが)。 サーバー上の設定も面倒。

・メールソフトの設定
  メールソフトへの設定内容
  SMTP認証(SMTP-AUTH)の設定について
  各種メールソフトの設定手順


Re: 独自ドメイン移転 - Tak

2019/01/30 (Wed) 15:44:30

⑤ 自分のmailerを設定する

図のように設定して(他にもあるが)、何とかmail配信が可能になった。

ただもう一つのmail addressだけがどうしても配信できない。 このaddressはGmail経由で配信されるように設定されたので、これを止めないとダメらしい。

ネットで探しまくって、やっとGoogleからその機能をoffにすることが出来ました。

これでド記事ドメインを使ったmail配信が出来るようになりました。

次はWorPressを使ったサイト、ブログの設定をやってみます。 

Re: 独自ドメイン移転 - Tak

2019/01/31 (Thu) 14:07:55

⑥ WordPressでサイトを開設

WordPressでブログの始め方という初心者用のblogを見つけました。

ここです---> https://hitodeblog.com/wordpress-start

何とかWordPressはインストールはできました。 が、が、それからが大変です。 

ここまで来たので,勉強のためにもう少し頑張ります。 
カメラ別館やPython別館のはしりをもうすぐupできるのでは???

本稿終わり。

Python 英文作成アプリ - Tak

2019/01/13 (Sun) 17:05:44

AIアプリの準備にformat関数を使って、英作文アプリを作ります。

① 第1文型(S + V)の例文

--------------------

# 第1文型
print('第1文型(S + V)の例文を作りましょう。')
print()
subject = input('主語(S)は何ですか? >')
verb = input('動詞(V)は何ですか? >')
print('{s} {v}.'.format(s=subject, v=verb))
print()
--------------------

これをrunすると次のようになります。

>>>主語(S)は何ですか? >He
>>>動詞(V)は何ですか? >walk
He walk.

ここで大事なのは、
print('{s} {v}.'.format(s=subject, v=verb))
ですが、最初に入力した主語(Heでしたね)をsubjectという変数に格納してます、次の動詞(walk)をverbに仕舞いました。

そして{S}{V}の順序に書き出しました。 いたって素直な書き方ですね。

文法的にはHe walks.が正しいのですが、そのうち直します。

print()で一行空けてます。

Re: Python 英文作成アプリ - Tak

2019/01/13 (Sun) 20:16:50

② 第2文型(S+V+C)の例文を作りましょう。

例えば、私はPythonです、とか言う文章ですね。

-------------------
print('第2文型(S+V+C)の例文を作りましょう。')
print()
subject = input('主語(S)は何ですか? >')
verb = input('動詞(V)は何ですか? >')
comp = input('補語(C)は何ですか? >')
print('{s} {v} {c}.'.format(s=subject, v=verb, c=comp))

これをrunすると、

第2文型(S+V+C)の例文を作りましょう。

主語(S)は何ですか? >I
動詞(V)は何ですか? >am
補語(C)は何ですか? >Python
I am Python.

と表示されます。 ちゃんと英文になっていますね。
主語に合わせて動詞を自分で選ばないとなると、使いもになりませんね。 今のところは・・・

Re: Python 英文作成アプリ - Tak

2019/01/15 (Tue) 17:47:24

③ 第3文型(S+V+O)の例文を作りましょう。

------------------------------------

print('第3文型(S+V+O)の例文を作りましょう。')
print()
subject = input('主語(S)は何ですか? >')
verb = input('動詞(V)は何ですか? >')
comp = input('目的語(O)は何ですか? >')
print('{s} {v} {o}.'.format(s=subject, v=verb, o=object))

これをrunすると、

第3文型(S+V+O)の例文を作りましょう。

主語(S)は何ですか? >My mother
動詞(V)は何ですか? >buy
補語(C)は何ですか? >an apple
My mother buy an apple.

と表示されました。 動詞の三単現のsが付いてませんけど・・・

Re: Python 英文作成アプリ - Tak

2019/01/15 (Tue) 18:48:11

④ 第4文型(S+V+O1+O2)の例文を作りましょう。

文法では、
 主語+動詞+間接目的語+直接目的語
と表現されるあれです。

# 第4文型
print('第4文型(S + V + O1 + O2)の例文を作りましょう。')
print()
subject = input('主語(S)は?>')
verb = input('動詞(V)は?>')
i_obj = input('間接目的語(O1)は?>')
d_obj = input('直接目的語(O2)は?>')
print('{s} {v} {o1} {o2}.'.format(s=subject, v=verb, o1=i_obj, o2=d_obj))
print()

これをrunすると
第4文型(S + V + O1 + O2)の例文を作りましょう。

主語(S)は?>She
動詞(V)は?>bought
間接目的語(O1)は?>me
直接目的語(O2)は?>a car
She bought me a car.

となります。 4型には間接目的語と直接目的が入れ替わった型もあります(例:She bought a car for me)。

Re: Python 英文作成アプリ - Tak

2019/01/17 (Thu) 20:31:45

⑤ 第5文型(S+V+O+C)の例文を作りましょう。

彼は母を喜ばせた、みたいな文です。

# 第5文型
print('第5文型(S + V + O + C)の例文を作りましょう。')
print()
subject = input('主語(S)は? >')
verb = input('動詞(V)は? >')
obj = input('目的語(O)は? >')
comp = input('補語(C)は? >')
print('{s} {v} {o} {c}.'.format(s=subject, v=verb, o=obj, c=comp))
print()

これをrunすると、
------------------
第5文型(S + V + O + C)の例文を作りましょう。

主語(S)は? >He
動詞(V)は? >made
目的語(O)は? >his mother
補語(C)は? >happy
He made his mother happy.
------------------
となります。 

これですべての形が揃いましたが、疑問文・命令文・簡単文などは別の機会にやります。

このプログラムで学んだことは、次のことです。

・format関数の使い方(の一例)
・コマンドプロンプトでの表示の仕方
・一行下げるときのcoding --> print()

これからの展望は、疑問文・命令文・簡単文対応や時制を含めた日本語対応ですね。 

Python 自作関数2 - Tak

2019/01/09 (Wed) 20:59:39

今まで見よう見まねで関数を作ってきましたが、そのcodingの意味合いが良く分かっていませんでした。

そこで少ししつこく関数の作り方・使い方を書いてみたいと思います。

① 世界で一番簡単な関数

引数のない場合例1

-------------------

def 俳句():  #関数宣言
  print('俳句と言えば芭蕉') #半角四つのインデントは必須です

俳句() #インデント不可。 俳句関数領域外から呼び出すこと

runすると、「俳句と言えば芭蕉」と表示される。
---------------
・これは引数も返り値(return)もない関数です。
・最後の俳句()というのが、関数である最初の俳句()関数を呼び出しているのです。 そしてその関数が「俳句と言えば芭蕉」をprint(表示)しているのです。
・これだけでは馬鹿馬鹿しく見えますが、言いたいのは、関数を先に宣言しておいて、後でその関数を呼び出すという手順を覚えて欲しいのです。
・そうすることによって、他のプラグラムからも、俳句関数を呼び出すことが出来るようになります(ここが大事!)

段々複雑な関数にして行きます。

Re: Python 自作関数2 - Tak

2019/01/10 (Thu) 08:59:36

② 引数ありの関数

----------------------
def keisan(a,b):
  print(a*b)

keisan(3,5)

runすれば15と表示されます。
----------------------
・こういった自分流の関数を作っておけば、後で他のプログラムから呼び出して使えます。





Re: Python 自作関数 2 - Tak

2019/01/12 (Sat) 14:47:00

③ 引数を他の関数から呼び出せる関数

何のことやら良く分かりませんね。 まずその関数を見てみましょう。

-------------------------
def add(x, y): #関数宣言
  return x + y #x+yの計算式

z = add(1, 2) #add関数にx=1、y=2を入れてreturnで受け取った計算式(x+y)の結果をzに格納します。 
print(z) #計算結果を表示します。

結果は3ですね。

何となく分かりますよね。 feffからreturnまでが一つの関数なのです。


Re: Python 自作関数2 - Tak

2019/01/12 (Sat) 14:55:33

④ 引数を他の関数から呼び出せる関数をもう一つ

-----------------------------

def add_mul(x, y): #関数宣言
  return (x + y, x * y) #x+yとx*yを後出の呼び出しcodeに渡す

z1, z2 = add_mul(1, 2) #z1に1を、z2に2を入れて加算と乗算を行います。
print(z1, z2) #その結果 3,2 を表示します。

--------------------------

いまは簡単な計算なので、余り有難みが分かりませんが、複雑な計算になると拝みたくなりますよ。

Python インデントの意味 - Tak

2019/01/08 (Tue) 20:31:59

Pythonでは変数の有効範囲を、インデント(字下げ)がその役目を負っております。

① Python三唱

次のような関数を作りました。 Pythonと三回printする関数です。

---------------------

def say_Python():
  message='Python'
  print(message')

#say_Python関数をforで三回呼び出す
for i in range(3):
  say_Python() #最初に宣言したsay_python()の処理を実行させる

----------------------

・最初のdefが関数の宣言です。
・関数には(): を付けます。
・次のcodeは処理codeですが、後でsay_Python()で呼び出されて実行します。
・このように関数宣言を先にします(この辺はVBAとは逆です)。
・ここで大事なのは、インデントで字下げされた部分が、その関数グループのcodingなのです。

だから、
def say_Python():
 message='Python'
 print(message)
のように半角二個のインデントはエラーになります。

Python 関数を作る - Tak

2019/01/05 (Sat) 22:09:18

Pythonには沢山の関数が準備されておりますが、自分で関数を作ってそれを使う場合はどうするのか分かりませんでしたので、練習がてら自作を試みてみます。

例として、1からnまでの単純加算式のプログラムを作ります。

x=n*(n+1)÷2という公式ですが、いつもこの式を書くのは面倒ですので、この式を関数にしてしまいます。

① 親クラスを作ります

class Addition():
  pass #ここは何も処理しない場合慣例としてpassと書く。 ユニックス愛好者ならhogehogeと書くかなかな。

  def addformura(value): 
    x=value*(value+1)/2
    return x

--------------------------

これを「加算関数.py」と名付けて適切なホルダーに格納します。

この関数の使いかたは次回。

Re: Python 関数を作る - Tak

2019/01/06 (Sun) 19:50:11

② 自作関数を呼び出す

先に作った関数を呼び込みます。

-----------------------

from 加算関数1 import Addition

x=input(' Up to what number you want to add? ')
print('Answer is '+ str(Addition.addformura(int(x)))+'.')

"""
これをrunすると、1から幾つまでの合計を計算しますかと質問されます(input()がそれに当たります)ので、この例では100と入れます。

すると計算されて、5050と答えがでます。 計算式は先に作った関数(プログラム)を呼び込んで使っております。

以下がその処理経過です。

------------------------

” Up to what number you want to add? ” 100とenterします。

Answer is 5050.0. <--これがその計算結果

"""

Python 英単語お助けソフト - Tak

2018/12/29 (Sat) 09:56:27

英検1-2級程度の出題ソフトを作りました。

① 英単語試験2.txtファイルを作る。

・まず下記のような単語ファイルを作ります。
・英単語と和文の間は、”全角スペース”で区切ってください。 この全角スペースで英文と和文を区別してます。
・取り合えず例として、下のように18個の英単語を作りました。

-------------
gaunt やせた
ransack くまなく捜す
clarion 明るく響き渡る
chasm 深い割目
diffidence 自信のなさ,内気,はにかみ,遠慮
desolation 荒廃させること(荒涼)
actuarial 保険計理(士)の
anathema キリスト教破門
annihilate 全滅,絶滅させる
antic 滑稽な態度,ピエロ,ふざけた
append (札などを)つける(attach)
arbiter 最高の権威
arbitrary 任意の,勝手な
beseech 嘆願する
betrothal 婚約
blare (らっぱ・ラジオなどが)鳴り響く,大声で叫ぶ
appal ぞっとした
capsize 船・ボートなどが転覆する・させる
carmine 洋紅色の
chasm (岩・地面などの深い割目

------------------

codeは次回

Re: Python 英単語お助けソフト - Tak

2018/12/30 (Sun) 08:41:23

② プログラムは以下

プログラムの概要は、次のようなものです。
・テキストファイルを読み込む
・18個の乱数に応じて、英単語とその日本語訳を変数の格納する
・キボードのenterを押すと、一行ずつ表示される
・exit入力で中止する

-------------------------
# 英単語試験2.py
# txt読み出して、乱数で英語と日本語を表示する
# 半角スペ-スで英語と日本語を分けているのでそれを厳守のこと

import random

def read_words():
  file = open("英単語試験2.txt")
  lines = file.readlines()
  file.close()

  e_words = []
  j_words = []

  for line in lines:
    line = line.rstrip("\n")
    name = line.rsplit(" ")
    if len(name) == 2:
      e_words.append(name[0])
      j_words.append(name[1])
    return [e_words, j_words]

def show_data(num, e_words, j_words):
  e_word = e_words[num]
  j_word = j_words[num]
  print(e_word + " " + j_word)

words = read_words()
e_words = words[0]
j_words = words[1]

x = input("Enter exit to quit")
while True:
  x = input()
  if x == 'exit':
    break

  num = random.randrange(0, 18)
  show_data(num, e_words, j_words)

--------------------------------

runすると、

Enter exit to quit

beseech 嘆願する

beseech 嘆願する

chasm 深い割目

desolation 荒廃させること(荒涼)

appal ぞっとした

clarion 明るく響き渡る

exitと入力するまで、延々とこれが続きます。


・インデントは変数の使える範囲(スコープといいます)を規定していますので、プログラムのルール第一号という感じです。
・一回のインデントは半数スペース4個分ですが、全角2回でcodingするとエラーとなります。

Re: Python 英単語お助けソフト(完) - Tak

2019/01/03 (Thu) 17:32:32

③ 英単語自動出題ソフト

・今回は出題用英単語100個のtxtファイルを準備しました。

・Enterでスタートし乱数で英単語が表示されます。

・1秒後にその訳が表示されます。 1秒では短い場合はsleep(5)などで5秒にして下さい。

----------------------


# 英単語試験100.py

import random
from time import sleep

def read_words():
  file = open("英単語試験100.txt")
  lines = file.readlines()
  file.close()

  e_words = []
  j_words = []

  for line in lines:
    line = line.rstrip("\n")
    name = line.rsplit(" ")
    if len(name) == 2:
      e_words.append(name[0])
      j_words.append(name[1])
    return [e_words, j_words]

def show_data(num, e_words, j_words):
  e_word = e_words[num]
  j_word = j_words[num]
  print(e_word, end=('')) #英単語出題、改行なし
  sleep(1) #1秒停止

  print(" : " + j_word) #日本語訳表示

words = read_words()
e_words = words[0]
j_words = words[1]

x = input("Enter exit to quit")
while True:
  x = input()
  if x == 'exit':
    break

  num = random.randrange(0, 100)
  show_data(num, e_words, j_words)

--------------------------------

出題の英単語を使った例文をそのうち載せます。

単語のレベルは1万語前後です。

Python Turtleグラフィックス - Tak

2018/12/28 (Fri) 09:50:19

面白いGUIを見つけました。 Python+tkinterの上で動作します。

x-y 平面の (0, 0) から動き出すロボット亀を想像してみて下さい。 turtle.forward(15) という命令を出すと、その亀が (スクリーン上で!) 15 ピクセル分顔を向けている方向に動き、動きに沿って線を引きます。 turtle.left(25) という命令を出すと、今度はその場で25度反時計回りに回ります。

これらの命令と他の同様な命令を組み合わせることで、複雑な形や絵が簡単に描けます。

これから小学校でも、AI志向のプログラムの教育が始まろううとしております。 面白そうなのでやってみます。

Turtleとは亀さんの意味ですので、ゆっくり進みましょう。

少し調べたところでは、ここまでやってきたPythonとtkinterの知識で対応できそうです。

Why don't you try with me!

① 亀が丸く動きます

-----------------
import turtle

t=turtle.Turtle()
#turtleをtと省略して効率化を図ります。

t.circle(100) # 半径100の円を描け

-------------------

tkinterでやるよりメッチャ早いです。 これなら子供でも痴呆人でも出来そう。

Re: Python Turtleグラフィックス - Tak

2018/12/28 (Fri) 09:55:31

② 亀輝く

余り簡単で馬鹿にされると困るので、ちょっと難しい図形を描きます。

----------------------------

#亀輝く1.py 12/28/2018

from turtle import *

color('red', 'yellow')
begin_fill()
while True:
  forward(200)
  left(170)
  if abs(pos()) < 1:
    break
end_fill()
done()

Re: Python Turtleグラフィックス - Tak

2018/12/28 (Fri) 22:26:55

③ 亀に命令を出す

どのように亀を動かすか、基本的なコマンド(命令)を見てみましょう。

------------------
import turtle

t=turtle.Turtle()

input() #命令用スイッチです。 キーボードのエンターを押せば指令が出ます。

t.forward(100) ㋑100歩進め

t.left(45) ㋺ 90度左向け

input()
t.color('red') ㋩ 赤ペンを持て

input()
t.forward(100) ㊁ # 100歩進め

input()
t.circle(100) ㋭ 半径100の円を描け

------------------------

上のcodeをrunしたのが図です。

このほかTurtleの動きなら、移動および描画として
forward() | fd()
backward() | bk() | back()
right() | rt()
left() | lt()
goto() | setpos() | setposition()
setx()
sety()
setheading() | seth()
home()
circle()
dot()
stamp()
clearstamp()
clearstamps()
undo()
speed()
などがあります。

Python、tkinterのコマンドと比べてなんと簡単、明瞭なことでしょう。

こんなコマンドを並べるだけで、インベーダーみたいなゲームなら割と簡単にできそうですね。

でも僕のやりたいのは、AIプログラミングなのでTurtleグラフィックスとは一寸違うようです。

Python 指定回数繰返し - Tak

2018/12/25 (Tue) 16:40:07

Pythonの基本的なことを忘れかけてきましたので、一寸復習します

① in subjectsを使う方法

------------------
# 方法1 OK

subjects = ['英語', '数学', '世界史', '現代文']
count=0
for subject in subjects:
  print(str(count + 1) + ':' , subject)
  count +=1

-------------------

・countはセロから始まるので、表示は1から始まるようにしている。

これで
1: 英語
2: 数学
3: 世界史
4: 現代文
という結果が得られます。

Re: Python 指定回数繰返し - Tak

2018/12/25 (Tue) 16:49:47

② in rangeを使う方法

----------------------

# 方法2 OK
subjects = ['英語', '数学', '世界史', '現代文']
for index in range(len(subjects)): #len(subjects)は「4」
  print(str(index + 1) + ':', subjects[index])

------------------------

これも同じような結果が得られます。
1: 英語
2: 数学
3: 世界史
4: 現代文

Re: Python 指定回数繰返し - Tak

2018/12/26 (Wed) 17:18:27

③ スマートな方法

・in enumerate(subjects)がPython使いには慣れているようです。

-------------------------
# 方法3
subjects = ['英語', '数学', '世界史', '現代文']
for index, subject in enumerate(subjects):
  print(str(index + 1) + ' : ', subject)


結果は下記となる

1: 英語
2: 数学
3: 世界史
4: 現代文

----------------------

Python クラスを理解するために - Tak

2018/12/21 (Fri) 10:59:13

ここはPythonに限らず、オブジェクト指向をうたっている言語で躓きやすいところです。

① まず言葉の説明 自分の備忘録として書きます

オブジェクト、オブジェクト指向、メソッド、クラス・コンストラクタ、インスタンスなど難しい言葉を先に説明いたします。


*オブジェクト:
・GUIアプリを作るときに、ラベル・テキストボックス・ボタンなどの部品を使いますが、夫々がすべてオブジェクトになります。 オブジェクトとはモノです。
・オブジェクトは「データ」と「機能」の集合体となります。 データとは数字とか文字列のことです。 機能とは、文字列の長さを求めたり、検索・置換と言ったことを差します。
・オブジェクトとは、あるデータを保持する為のメモリー上の塊でもあります。

*オブジェクト指向:
・プログラムを作るとき、オブジェクトを組み合わせてアプリを作ることを言います。
・オブジェクト指向の三大要素というのがあります。「継承」、「カブセル化」、「ポリモーフィズム」ですが、徐々に説明していきます。
 -継承:オブジェクト指向では、実装の際に抽象クラスが持つ機能を具体クラスに継承することができる。
 -カプセル化:オブジェクトにカバーを被せて中身を隠してデータの気密性を高めます。 機能とデータの範囲を明確にします。
 -ポリモーフィズム:多様性のことですが、まだここまでは分かってない。

「継承」だけで十分ではないかな~?

*メソッド:
・オブジェクトが何をするか(何をさせるか)という振る舞いをメソッドとしてクラス内に定義します。
・例えば人の場合なら「歩く」「食べる」などの振る舞いがメソッドといわれるものです。

*クラス:
・オブジェクト指向では、よく共有する性質を持つ仲間を抽出して分類します。その分類をクラスと呼びます。クラスには三つの要素――名前(クラスそのものの名前)、データ(属性)、ふるまい(動作)があります。 これらの要素を持つオブジェクトをまとめて定義したのがクラスというわけです。
・クラスとは分類すること

*コンストラクター:
・クラスからインスタンスが生成されるときに、必ず呼び出される特殊なメソッドのこと。
・コンストラクタはクラス名を書くだけで、勝手に呼び出される。
・インスタンスに初期値を設定するような処理は、コンストラクタとしてインスタンス生成時に纏めて行うと便利。 <--データの初期化である。
・クラス名と同じ名前を持つメソッドとして定義される。
・戻り値は持たない。

*インスタンス:
・クラスから生成された実態がインスタンスです。
・クラスは設計図で、インスタンスはその設計図を基に作られたオブジェクトとなります。
・建築士が書いたものがクラスで、それを基に作られた建物がインスタンスとなります。

今のところ以上ですが追記・修正などを含めて充実させたいと思います。

Re: Python クラスの継承 - Tak

2018/12/23 (Sun) 09:34:13

② 継承の初歩の初歩

・オブジェクト指向 継承機能の説明
・既存の親クラスを元にして子供クラスを作成している.
・親クラスと引き継ぐクラスの関係がわかるように、親子関数・変数を日本語で書いてみました。
# 親の性格を子供が継承している。 

---------------------------

class 親クラス():
  def __init__(俺, 優秀): <---ここがコンストラクター
    俺.性格 = 優秀

俺= 親クラス("親の私は優秀よ。") <---インスタンス
print(俺.性格)

--------------
runさせると、
 親の私は優秀よ。
と表示されました。

・やっぱりcodeに日本語を入れると分かりやすい、good idea!

・これで親の性格を子が受け継ぐことができました。 が、ちょっと腑に落ちないところがあります-->次回


Re: Python クラスを理解するために - Tak

2018/12/23 (Sun) 19:05:36

③ 継承の簡単な例 


------------------------
class 継承():
  def __init__(self, a,b,c):
    self.引継1 = a
    self.引継2 = b
    self.引継3 = c

  def print_合算(self):
    合算 = self.引継1+self.引継2+self.引継3
    print(合算)

複製 = 継承(1,2,3)
複製.print_合算()

--------------------------

・クラスである継承には、コンストラクタ(__init__の部分)とprint_合算というメソッドが含まれます。
・コンストラクタでは引数に指定したa,b,cを属性(self.引継)に渡しています。
・print_合算はインスタンス(複製)が持つ三個の属性の合計を計算・表示します。
・その結果は 6 と表示されます。 1+2+3=6ですね。
・selfのところはどんな文字列でもOKみたいですが、必ず必要です。 それが引き継がれる相手を表します。

少し理解が増えたでしょうか? まだだようね~。

Python 自作関数 クラス - Tak

2018/12/14 (Fri) 20:48:57

これからのPythonを考えると、独自のオブジェクトを使うときはクラスを定義する必要があります。

難しいことは考えずに、簡単な自作関数(クラスと言います)を作ります。

クラスは親クラスを造れば、子クラスは親の性質を引き継ぐことが出来ますので、後々子クラスを作るのが簡単になるようです。

では早速作ってみましょう。

① カスタマー訪問計画

上司のとの打ち合わせを繰り返します。

---------------------------

class Tutor:
  def __init__(self, max):
    self.max = max
    self.count = 0

  def teach(self):
    if self.count < self.max:
      print('今日でしょ!')
      print()
    else:
      print('よーし続きは明日だ')
    self.count += 1

#=====================================
# プログラムの起点
#=====================================
if __name__ == '__main__':

  tu = Tutor(4)
  for i in range(5):
    print('このカスタマーにはいつ行くのですか?')
    tu.teach()
---------------------------
これでrunすると

このカスタマーにはいつ行くのですか?
今日でしょ!

このカスタマーにはいつ行くのですか?
今日でしょ!

このカスタマーにはいつ行くのですか?
今日でしょ!

このカスタマーにはいつ行くのですか?
今日でしょ!

このカスタマーにはいつ行くのですか?
よーし続きは明日だ
>>>
と表示されます。 


Re: Python 自作関数 クラス - Tak

2018/12/15 (Sat) 10:17:46

② 前回の説明

少し戻ってクラスって何なのだ!という所から始めたいと思います。

いままで何気なく使っていた、表示関数print()、乱数発生関数random()、整数int()などなどすべてクラスなのです。

頻繁に使われる関数は、自分用に作っておけばこれからはそれを多少変更して(これが継承というやつです)、子クラスを造れば使い回しが出来るというわけです。

卑近な例でいうと、例えば class Behicleという親クラスを作り、Behicleに共通のスペック(エンジン、車輪、ブレーキ、ハンドル)だけを決めて置きあとは子クラスのcar,bike・・・・と幾らでも作っていけます。 

一回しか使わない関数の場合はクラスを作る必要はなく、単に関数を作ってしまえば事足ります。

今回はクラス作成の練習ですので、前回のcodeにどんな意味があるのか書いてみます。

---------------------------

・Tutorと言うのが親クラスで、selfは子クラス(すなわち継承するクラス)です。
・def __init__(self,パラメーター,,,,)部分でオブジェクトの初期化をします。
・self.maxやself.countはインスタンスと呼ばれ、ここで値が代入されます(初期化)。
・selfは一般に使われますが、myとかmeでもなんでもOKです。

・teach(self)が子クラスの名前です。
・子クラスのcountがmaxより小さいうちは、teachはprint('今日でしょ!')と言います。
・子クラスのcountがmaxより同じか大きくなった時には、print('よーし続きは明日だ')とprintします。
・print()は見やすくするために、一段開けてます。
・self.countは、カウンターcountを1ずつ増やします。

ここまでがクラスの宣言です。

次に「プログラムの起点」が、処理作業の部分です。ここが一番分かり難い。

・tuはTotorの参照情報で、この数字が元のクラスに戻されてself.maxが4に初期化されます。
・if __name__ == '__main__':と書いたことで、tutorモジュールを別のモジュールでインポートして使えるようになります。
  --->ますます分かんなくなりそう!
・def teach(self):は処理回数に応じて異なるメッデージを表示するメソッドです。
・for i in range(5):は5回目で、メッセージが変わり、プログラムは終了します。

何遍読んでも覚えられません。 必要なときコピペしましょう(ネットにも沢山出ているし)。

Re: Python 自作関数 クラス - Tak

2018/12/15 (Sat) 14:51:08

③ すこし簡素化

クラス変数にして簡素化する

------------------------
class Tutor:
  count = 0
  max = 4

  def teach(self):
    if self.__class__.count < self.__class__.max:
      print('今日行きましょう!')
      print()
    else:
      print('よーしもう一回明日トライだ')

    self.__class__.count += 1

#==================================
# プログラムの起点
#===================================
if __name__ == '__main__':

  tu1 = Tutor()
  for i in range(3):
    print('このカスタマーにはいつ行くのですか?')
    tu1.teach()
  tu2 = Tutor()
  for i in range(2):
    print('この客は買ってくれませ~ん')
    tu2.teach()
---------------------------

これをrunすると、

このカスタマーにはいつ行くのですか?
今日行きましょう!

このカスタマーにはいつ行くのですか?
今日行きましょう!

このカスタマーにはいつ行くのですか?
今日行きましょう!

この客は買ってくれませ~ん
今日行きましょう!

この客は買ってくれませ~ん
よーしもう一回明日トライだ
>>>
となります。 いろいろ納得できるまで変数を変えてみましょう。



 

tkinter 10-->16進数変換 - Tak

2018/12/12 (Wed) 19:39:59

10進法の数値を16進法の数値に変換する簡単ソフトを作ります。 

① まずはExcel VBAなら次のように簡単です。

--------------------
Private Sub CommandButton1_Click()

 TextBox2.Value = Hex(TextBox1.Value)

End Sub

Private Sub CommandButton2_Click()
 Unload UserForm1
End Sub

------------------
変換するだけなら、一行で終わります。

次回はPython tkinterで展開します。

Re: tkinter 10-->16進数変換 - Tak

2018/12/13 (Thu) 17:05:13

② 16進数への変換をPythonでやってみます

Pythonでは、16進数には0xが前に付きます。

GUIであるtkinterを使うために、VBAよりやたらとcodeが長くなりましたが、AIソフトを作るための下準備ですので我慢我慢! 

---------------------

import tkinter

# 画面作成
root = tkinter.Tk()
root.geometry('300x250')
root.title('10-->16進数変換')


# clickイベント
def btn1_click():
  # テキスト取得
  num = int(txt_1.get())
  # 16進数へ変換してテキストボックスへセット
txt_2.insert(0, hex(num))

# ラベル
lbl_1 = tkinter.Label(text='10進数')
lbl_1.place(x=30, y=70)
lbl_2 = tkinter.Label(text='16進数')
lbl_2.place(x=30, y=100)

# テキストボックス
txt_1 = tkinter.Entry(width=20)
txt_1.place(x=90, y=70)
txt_2 = tkinter.Entry(width=20)
txt_2.place(x=90, y=100)

# ボタン
btn1 = tkinter.Button(root, text='計算', command=btn1_click)
btn1.place(x=100, y=170)

btn2 = tkinter.Button(root, text="終了", command=quit)#終了の確認要求あり
btn2.place(x=180, y=170)

# 画面をそのまま表示
root.mainloop()

Python 自作関数1 - Tak

2018/12/09 (Sun) 21:22:40

Pythonは関数が多数付属しておりますが、その関数を元にして拡張した関数(継承と言います)を自作出来ます。

そうすればプログラムが効率よくできるようになります。 

まずは簡単な関数を作ります。

① パワハラ関数

上司が部下に「頑張るぞ! それ行けっ!」と発破をかけているところです。

対する部下は、新卒の英語のできる部下なのでしょう、「Yes Sir!」と腕を振り上げている場面ですね。 まだパワハラにはなっておりません。

----------------------

# 自作関数1.py 12/9/2018
# まず継承とかないシンプルな関数

def add_sound(attack):
  for i in range(5):
    print(attack, '--->Yes Sir!')
  return attack

add_sound('頑張るぞ! それっ行けっ!')

------------------------------

runすると、

頑張るぞ! それっ行けっ! --->Yes Sir!
頑張るぞ! それっ行けっ! --->Yes Sir!
頑張るぞ! それっ行けっ! --->Yes Sir!
頑張るぞ! それっ行けっ! --->Yes Sir!
頑張るぞ! それっ行けっ! --->Yes Sir!
>>>
と表示されます。

Re: Python 自作関数1 - Tak

2018/12/10 (Mon) 08:52:15

② パワハラ関数の説明

メッチャ簡単なcodeで説明します。

----------------
def 挨拶(上司,部下):
  print(上司,部下)

挨拶('頑張れ','了解')

runすると、頑張れ、了解とprintされます。
-----------------

・def 挨拶(引数)と言う関数を宣言します。
・挨拶という関数は、上司と部下と言う引数(変数)を持っています。
・print(上司、部下)は、下に出てくる挨拶関数(引数)が引数を持ち帰ってくれば印刷をします。

言葉で言うとなんか面倒ですが、codeを書いてrunさせてみると理解がすんなりいくと思います。

纏めると自作関数の作り方は;
・defで関数名(引数)を書く
・ここで行う処理を書く(ここではprint())
・そして、関数に依頼する引数を戻してやる
-->printが処理を行う、という順序です。

Re: Python 自作関数1 - Tak

2018/12/11 (Tue) 19:41:48

③ 自作関数の駄目押しサンプル

これも明瞭簡単な例です。

---------------

def say_hellow():
____print('Hello') <--半角四個(全角二個はエラーになる)

#say_hello関数を三回呼び出す
say_hellow()
say_hellow()
say_hellow()

runすると当然;
Hello
Hello
Hello
>>>
となります。 say_hello()を三つ並べるのは幼稚なですね。 ではどうしましょう?


Re: Python 自作関数1 - Tak

2018/12/12 (Wed) 09:32:22

④ 少し賢く

賢くと言うより当たりまえの書き方にしました。

----------------

def say_hello():
____for i in range(3):
________say_hello()

---------------

runすると当然;
Hello
Hello
Hello
>>>
となります。 

Python tkinter復習 - Tak

2018/12/06 (Thu) 10:19:27

import tkinter

GUI tkinterの復習をします。

① まだウインドーを作ります

--------------------------

import tkinter

# Tkクラス生成
root = tkinter.Tk()

# 画面サイズ
root.geometry('300x300')

# 画面タイトル
root.title('GUIの復習')

Re: Python tkinter復習 - Tak

2018/12/06 (Thu) 17:34:02

② ウインドーにコマンドボタンを張り付ける

--------------------

import tkinter

root =tkinter.Tk()
root.geometry("300x300")
root.title(u'GUIの復習')

button = tkinter.Button(root, width=10,height=2,text=u"押す") #ボタンの生成

button.pack() # pack()で確定処理を行うことで始めて画面に表示される

root.mainloop()

------------------

button.pack()で張り付けると、一番上に張り付く。 勿論位置の指定はできるが次回のお楽しみ。

Re: Python tkinter復習 - Tak

2018/12/06 (Thu) 19:39:47

③ コマンドボタンの位置を調整する

--------------------

import tkinter

root =tkinter.Tk()
root.geometry("300x300")
root.title(u'GUIの復習')

button = tkinter.Button(root, width=10,height=2,text=u"押す",bg = "pink") #ボタンの生成

#button.place(x=左からの距離, y=上からの距離)で指定できます.

button.place(x=100, y=50)

root.mainloop()

------------------------------

button = tkinter.Button(root, width=10,height=2,text=u"押す",bg = "pink") #背景色をpinkにしました。

#button.place(x=左からの距離, y=上からの距離)で指定できますので、 button.place(x=100, y=50) で位置決めができます。

他の部品の位置決めも大体こんなものです。

Re: Python tkinter復習 - Tak

2018/12/06 (Thu) 20:12:10

④ コマンドボタンの命令を書く

---------------------

import tkinter as tk

root =tk.Tk()
root.geometry("300x300")
root.title(u'GUIの復習')

button = tk.Button(root, width=10,height=2,text=u"押す",bg = "pink") #ボタンの生成

def push():
  print("出来ましたね!")

button = tk.Button(root, text="Push", bg='pink',command=push)

button.place(x=100, y=50)

root.mainloop()

-------------------

・ボタンを押したら、shellに”できましたね”と表示します。

・その処理を自作関数として、def push()と定義しています。 VBAなどと違って関数定義先に来ます。 ある意味流れが分かり易いです。

・ボタンの処理命令がcommand=pushです。 命令されたら、pushと言う関数を読取り、print("出来ましたね!")を表示します。

・すべてのcodeはroot=tk.Tk()とroot.mailloop()の間に書きます。

・その前にimport thinter as tk を忘れないように。 tkinterを呼び出さないとエラーになります。

・print()はdefの中での処理命令ですので、必ずdefより半角4個下げて下さい(またはTab)。 print()関数の親分はdef()関数ですよと宣言しているのです。

少し分かりかけてきませんか?

Re: Python tkinter復習 - Tak

2018/12/08 (Sat) 21:09:19

⑤ ボタンonでラベルに文字を表示するcode

「Message will appear」と書いたボタンをクリックすると、「You are enjoying Python!」と表示されます。

これがボタンに命令させる最初のcodeです。
---------------------------
#ボタン押下でラベルに表示する 12/8/2018
#tkinter(button_label1)

import tkinter as tk

root = tk.Tk()
root.title("ラベルに書きだす")
root.geometry("300x200")

def on_clicked():
label1=tk.Label(root, text="You are enjoying Python!",bg="pink")
label1.place(x=90,y=50)

#ラベルを作るbuttonを貼る
button=tk.Button(root, text="Message will appear.",bg="light blue",command=on_clicked)
button.place(x=100,y=5)

root.mainloop()

-------------------------

ここで覚えることは;

・def on_clicked():とボタンに指示を出す関数を作ることです。関数宣言が下の指示より先に書かれる必要があります。

・そしてbuttonに command=on_clicked という指示をすることです。

・部品の位置決めはpack()とplace()が主なものです。

・ボタンをクリックすると、図のように「You are enjoying Python!」と表示されるのは先に書いた通りです。

Python textファイルから呼び込む - Tak

2018/11/28 (Wed) 09:19:56

① ファイルを読み込む

code上のリストへ数あるデータを書き込むのは、止めて少し効率的な方法にします。

0 百花繚乱
1 疾風迅雷
2 明鏡止水
3 不撓不屈
4 国士無双
5 魑魅魍魎
6 行雲流水
7 花鳥風月
8 天下無双
9 行雲流水

このデータを四文字熟語.txtと言うファイルにして、.pyアプリと同じホルダーに入れます。

まず読込用codeを書きました。

-----------------

import random
file = open("四文字熟語.txt")
lines = file.readlines()
file.close()

#四文字熟語 = [] <---不要だった。

for line in lines:
  line = line.rstrip("\n")

  print(line)

------------------------

・何回かいってますが、インデントは半角4個です、全角2個ではありません(見かけは同じですが、全角2個の場合はerrorとなります)。

・[]は画面上では□に見えますが[ ]です。


ではこれをrunしてみましょう。



おう、出来てる、よかったよかった(当たり前!)

Re: Python textファイルから呼び込む - Tak

2018/11/28 (Wed) 19:50:45

② 乱数による10個の表示

-----------------------

import random

file = open("四文字熟語.txt")
lines = file.readlines()
file.close()

for line in lines:
 line = line.rstrip("\n")

 temp = random.choice(lines)
 print(temp)

-------------------

凄く簡単なcodeですけど、重複があることと一行空くときと空かないときが有ります。

これからその対策をやります。

Re: Python textファイルから呼び込む - Tak

2018/11/29 (Thu) 17:31:23

③ 重複無しの熟語


-------------------

import random

file = open("四文字熟語.txt")
lines = file.readlines()
file.close()

  四文字熟語 = [] #何も入っていないリスト

for line in lines:
四文字熟語.append( line.rstrip("\n"))
  temp = []

for カウンター in range(1):
  temp = random.sample(lines,10)
  print(temp)

これをrunすると、
['3 不撓不屈\n', '4 国士無双\n', '1 疾風迅雷\n', '2 明鏡止水\n', '7 花鳥風月\n', '5 魑魅魍魎\n', '0 百花繚乱\n', '9 行雲流水', '8 天下無双\n', '6 行雲流水\n']
と重複なしの10個の熟語がランダムに並びます。

いや~、ここまで来るのに凄い時間が掛かりました。

この後何かの応用編で、また出てきますので宜しく。

Re: Python textファイルから呼び込む - Tak

2018/12/02 (Sun) 14:22:33

④ ファイルの読出し法あれこれ

沢山あり混乱していますので、纏めました。

方法①のcodeで表示させると、下の表示結果①の様になります。

-------------------

#tak-ファイル呼出し0.py
#ファイルの読み出し、書込みの練習 12/2/2018

# ① ファイルをリスト([ ])一行で表示する
f = open('四文字熟語.txt','r')
line = f.readlines()
f.close() #closeは最後で良い
print(line)

# ② ファイルの最初の一行のみ取得
f = open('四文字熟語.txt','r')
line = f.readline()
f.close() #closeは最後で良い
print(line)
#f.close() #closeは最後で良い

# ③ このやり方は、ファイルを最後まで読み出す。 \nが自動で入るのか一行おきになる。
f = open('四文字熟語.txt')
for line in f:
print(line)
f.close()


# ④ ファイルの中身をそのまま表示する
f=open('四文字熟語.txt')
str=f.read()
print(str) #これもOK
f.close() #closeは最後で良い

"""
== RESTART: J:/MyDocuments/Python/Tak_PythonCode集/Python.py/tak-ファイル呼出し0.py ==

① .readlines()は一行リストで読み込む
>>>['0 百花繚乱\n', '1 疾風迅雷\n', '2 明鏡止水\n', '3 不撓不屈\n', '4 国士無双\n', '5 魑魅魍魎\n', '6 行雲流水\n', '7 花鳥風月\n', '8 天下無双\n', '9 天衣無縫']

② .readline()で最初の一行のみ表示、全体を表示したいならforや.read()を使用する
>>>0 百花繚乱

③ 全部を読み出したいのでforを使う, 一行おきになる
>>>0 百花繚乱

1 疾風迅雷

2 明鏡止水

3 不撓不屈

4 国士無双

5 魑魅魍魎

6 行雲流水

7 花鳥風月

8 天下無双

9 天衣無縫

④ ファイル加工せずreadで全体を読み出す。
>>>0 百花繚乱
1 疾風迅雷
2 明鏡止水
3 不撓不屈
4 国士無双
5 魑魅魍魎
6 行雲流水
7 花鳥風月
8 天下無双
9 天衣無縫

Python 四文字熟語辞典 - Tak

2018/11/26 (Mon) 17:44:38

少し知的な遊びのソフトを作ります。


① 四文字熟語辞典

Google調査による四文字熟語のトップテンを見てみましょう。

まずcodeの中に熟語を書きます。 リストは[ ]で括ります。

----------------


四文字熟語 = ['百花繚乱',
      '疾風迅雷',
      '明鏡止水',
      '不撓不屈',
      '国士無双',
      '魑魅魍魎',
      '行雲流水',
      '花鳥風月',
      '天下無双',
      '行雲流水']

print(四文字熟語)

これをrunすると、四文字熟語と言うリストの中身が表示されます

 ['百花繚乱', '疾風迅雷', '明鏡止水', '不撓不屈', '国士無双', '魑魅魍魎', '行雲流水', '花鳥風月', '天下無双', '行雲流水']


-------------------------------

・四文字熟語と言う変数に、熟語10個を格納します。

・今回はそれが正しく格納されたかどうかの確認をしています。

注意:
・[ ]をわすれないこと
・'百花繚乱', と'',を忘れないこと
・最初のデータ(ここでは、'百花繚乱',)を入れた後は必ずリターンして改行して下さい。 このインデンタは非常に大事で、間違うとエラーとなります。 その理由はインデントで変数の範囲(身内)を決めているからです。

次回はそれを発展させた形式に致します。 


Re: Python 四文字熟語辞典 - Tak

2018/11/26 (Mon) 18:44:25

② リストから読み出す

codeをご覧ください。

------------------

四文字熟語 = ['百花繚乱',
      '疾風迅雷',
      '明鏡止水',
      '不撓不屈',
      '国士無双',
      '魑魅魍魎',
      '行雲流水',
      '花鳥風月',
      '天下無双',
      '行雲流水']

for 熟語 in 四文字熟語:
  print(熟語)

これをrunすると、

百花繚乱
疾風迅雷
明鏡止水
不撓不屈
国士無双
魑魅魍魎
行雲流水
花鳥風月
天下無双
行雲流水
>>>
と表示されます。

-----------------

・for A in B とは、BというリストからAを取り出すと言う関数です。 Excelですとfor~nextと言う関数でしたが、Pythonではリストの中のデータが無くなるまで続けます。

・print(A)は、Aを表示するという関数で、データが無くなるまで続きますので、結局すべてのデータが書き出されるというわけです。

この関数は、頻繁に利用される重要関数の一つです。

Re: Python 四文字熟語辞典 - Tak

2018/11/26 (Mon) 19:32:54

③ 乱数で出力する

--------------------

四文字熟語 = ['百花繚乱',
      '疾風迅雷',
      '明鏡止水',
      '不撓不屈',
      '国士無双',
      '魑魅魍魎',
      '行雲流水',
      '花鳥風月',
      '天下無双',
      '行雲流水']

for count in range(10):
  temp = random.choice(四文字熟語)
  print(temp)

これをrunすると、今回は下の様に表示されました。

国士無双
天下無双
魑魅魍魎
行雲流水
天下無双
疾風迅雷
不撓不屈
国士無双
天下無双
魑魅魍魎

-----------------------

・問題は、同じ熟語が何回か出てきました。 原因は乱数に重複が有るからです。

では次回までに重複無しの乱数を作り出すようにいたします。

Re: Python 四文字熟語辞典 - Tak

2018/11/27 (Tue) 16:58:22

④ 重複無し熟語発生

-----------------------

# 注意:空白はすべて半角英文字のこと

import random

#インデントは適切に
#[ の位置はここでないとエラーになる( ]はOK)
四文字熟語 = [
  '0 百花繚乱',
  '1 疾風迅雷',
  '2 明鏡止水',
  '3 不撓不屈',
  '4 国士無双',
  '5 魑魅魍魎',
  '6 行雲流水',
  '7 花鳥風月',
  '8 天下無双',
  '9 行雲流水'
  ]

空リスト = []

for カウンター in range(10): #カウンターの所はどんな文字でもよい
  一時保存 = random.choice(四文字熟語)  #変数からランダムに選んで一時保存変数に格納する
  while 一時保存 in 空リスト:   #毎回選んだ熟語(一時保存に入っている)が、空リストにある場合は次に移る
  一時保存 = random.choice(四文字熟語)   #再度熟語をランダムに選び直してtempに入れる
  空リスト.append(一時保存)
  print(一時保存)

--------------------

今回は分かり易いように、変数に日本語を使いました。 また重複チェックがしやすいように番号を0-9まで降ってあります。

これで重複無しのデータが、10個ランダムに表示されるようになりました。

Python URL get - Tak

2018/11/25 (Sun) 21:35:58

少し動きのあるものをやって見ましょう。

① 「日経新聞を読む」

インターネットブラウザーで、「日経新聞」のサイトへ飛んでみましょう。

import os

os.system('explorer https://www.nikkei.com/')


これだけです。 試してみて下さい。 

Re: Python URL get - Tak

2018/11/26 (Mon) 09:28:22

② 続け複数のサイトを開くには

----------------------

import os

#os.system('explorer https://www.nikkei.com/')
#前回のやり方

nikkei='explorer https://www.nikkei.com/'
os.system(nikkei)

sankei='explorer https://www.sankei.com/'
os.system(sankei)

--------------------

僕はweb browserにChromeを使ってますので、このcodeだと日経、産経のサイトがchromeで開きます。


Python code集を作る - Tak

2018/11/07 (Wed) 13:52:50



目的に合わせて、沢山codeが出来てきました。 それらを簡単に見られるようにcode集ソフトを考えています。

① まずcodeのtextを作ります。 

・名前をcode_text(root).txtとします。
・それに簡単なウインドー表示用の次のcodeを書きます。
------------------
import tkinter as tk
root=tk.Tk()
root.title('code集-call texts onto lables')
root.geometry('800x800')

root.mainloop()

-------------------

Re: code集を作る - Tak

2018/11/07 (Wed) 13:57:37

② pythonのcodeをnew fileに書きます。

------------------------
import tkinter as tk
root=tk.Tk()
root.title('code集-call texts onto labels')
root.geometry('800x800')

root.mainloop()
-------------------

このプログラムを走らせると、ウインドーだけが表示されます。 800x800と少し大きいですが。 codeはまだ表示されません、次回です。



Re: code集を作る こちらに変更 - Tak

2018/11/23 (Fri) 09:06:14

③ OneNoteを使う方法

簡単な方法に変更しました。

Re: code集を作る - Tak

2018/11/23 (Fri) 09:11:37

④ ThinkWise (SourceNext有償)

これは関連のあるアイディアを纏めるのに便利そうです。

こうやって纏めてもなかなか見直すと言うことはすくないですね~。 何故ってどこに書いてあったかと探す時間より、ネットで探した方が早いからです。

いままで述べてきたocde集は、後で利用するというより、書くときにしっかり理解していないといけないので、その時に覚えるというのが利点でしょうかね。

明日は違う方法を試しているかもしれません。


Copyright © 1999- FC2, inc All Rights Reserved.