解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

インストール不要‼︎ テレワークにも通用する⁉︎ Windows の標準機能だけで出来る自動化 〜バッチファイルの具体例〜



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


下のリンクの記事でテレワークにすぐに対応するための古い技術を紹介しました。

【古い技術の紹介記事】
インストール不要‼︎ テレワークにも通用する⁉︎ Windows の標準機能だけで出来る自動化 - 解析エンジニアの自動化 blog

古い技術としては下の3つをあげました。
・バッチファイル
Excel VBA
・タスクスケジューラ

この記事ではバッチファイルについて具体的な例をまとめてみます。



動作環境


Windows 10



プログラム

ソースコード 〜プログラム実行〜



rem バッチファイルのあるフォルダパスに移動する
cd /d %0\..

rem プログラムが保存されている「program_folder」フォルダに移動する
cd program_folder

rem 「program.exe」プログラムを実行する
start program.exe


このバッチファイルがあれば自動化の幅がだいぶ広がります。

フリーソフトでもなんでもバッチファイルから実行可能です。


ソースコード 〜タスクスケジューラの操作〜



rem 今日の 21 時 30 分に1度だけ実行(繰り返しなし)
schtasks /create /tn "MyTask" /tr c:\sample.bat /sc once /st 21:30


プログラムの実行と合わせれば、業務をどんどん自動で実行するとこが出来るようになります。

この程度のバッチファイルならプログラムから作成する事も簡単です。


ソースコード 〜フォルダを開く〜



rem 「Test」フォルダを表示する
start explorer C:\Test\


なんだかんだでフォルダを開くのはめんどくさいです。

いっきに開きたいフォルダが全部開けたら地味に快適です。


ソースコード 〜ネットワークサーバへのアクセス〜



rem z ドライブを削除する
net use z: delete

rem z ドライブに IP アドレスが 192.168.1.1 の端末の「sample」というフォルダを設定する
rem ただし、user_name と password はそれぞれ自分のものに書き換えてください。
net use z: \\192.168.1.1\sample /user:user_name password

rem z ドライブをエクスプローラーで表示する
start explorer z:


本日の目玉です‼︎

パスワード認証付きのサーバやフォルダへのアクセスをバッチファイルで行えます。

これは重宝すると思いますので是非覚えてください。


ソースコード 〜 Web ブラウザで Web サイトを表示する〜



rem Microsoft Edge で Web サイトを表示する
start microsoft-edge:https://www.google.co.jp/


Microsoft Edge で Web サイトを表示するだけです。

最近ではテレワークで色んな Web アプリを使う事もあると思います。
そんな時にお使いください。



コメント

出来るだけ具体的な使い方をまとめて見ました。

タスクスケジューラの操作がとても重要です。

業務スケジュールの進捗管理やタスクリストの作成などの定型的な作業は自動化してしまいましょう。

自動化できない作業だけに必要なタイミングで集中することが出来れば、テレワークだろうとなんだろうと出来高は上がります。



以上

インストール不要‼︎ テレワークにも通用する⁉︎ Windows の標準機能だけで出来る自動化



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


新型コロナウィルス(COVID-19)の影響で、急激にテレワークが導入されている企業が増えているというニュースがありました。

テレワークについては今までテレワークの導入の話が上がったけど、立ち消えになったり、試験的に導入したけど、上手くいかず取り止めになったりした企業もあるように思います。

この緊急事態宣言でどの企業もテレワークのなし崩し導入で生産性だだ下がりなのでしょうか?

そこで、 Windows の標準的な機能だけで出来る自動化をまとめてみます。

具体的には以下の通りです。
(1)バッチファイル
(2)Excel VBA
(3)タスクスケジューラ

かなり古くて廃れた技術で見向きもされなくなったものですが、プログラミング自体を仕事としているわけではないなら、全然問題ありません。

上記の技術の中に Python が入ってくると、特殊な仕事も比較的簡単に自動化出来たりしますが、今回は Windows の標準的な機能のみに限定します。

Python を使った自動化はまた別の機会にします。



動作環境


Windows 10
Microsoft Excel 2013



Windows 標準機能で出来ること

出来ることと言うとなんでも出来てしまうので、入門編として、簡単で便利なことをまとめておきます。

バッチファイル

バッチファイルを使うこと自体を批難する人さえいると思います。
しかし、プログラムを作る仕事をしているわけではないなら、どうでも良いと思います。

【簡単で便利なこと】
・プログラムの実行
・タスクスケジューラの操作
・フォルダを開く
・ネットワークサーバへのアクセス
・ Web ブラウザで Web サイトの表示

Excel VBA

VBA なんてプログラミング言語ではないと言う人もいると思います。
良いんです 。 10 時間かかっていた作業が 10 秒で終われば‼︎

【簡単で便利なこと】
・メールの作成
Excel 作業
Windows API

タスクスケジューラ

使い道は 1 つしかないです。時間通りにプログラムを実行します。
定期的であったり、ログオン直後など複雑なプログラム実行が出来ますが、めんどくさいので、プログラミングでスケジュールの計画を立てて、バッチファイルから自動的に実行させた方が楽です。

【簡単で便利なこと】
・プログラムの自動実行



コメント

自動化出来る事が少なく感じるかもしれません。

しかし、やっている人とやっていない人ではテレワークという働き方では明らかな差になって現れてくることでしょう。。

この緊急事態宣言の延長がいつまで続くか分からない状況下で、安定的に大きな出来高を継続するために、微力ではありますが、こんな方法もあります。



以上

Excel VBA でショートカットキーを作成する



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


久しぶりに Excel VBA でマクロ組んでる時にショーカットキーを割り当てたくて、エクセル既存のショートカットキー以外で、実際に Ctrl + Q とかを押しながら使えそうなキーの組み合わせを調べました。

もちろん、他にも使えるキーの組み合わせはあると思いますが、せっかく総当たり的に調べたので、忘れない為にも記事にしておきます。



動作環境


Windows 10
Excel 2013



ショートカットキー

キー組み合わせの右側には Excel VBA で実行すると macro というサブルーチンもしくは関数にショートカットキーが割り当てられるソースコードを書いています。

キー組み合わせ


Ctrl + R   Application.OnKey "^r", "macro"
Ctrl + Y   Application.OnKey "^y", "macro"
Ctrl + D   Application.OnKey "^d", "macro"
Ctrl + J   Application.OnKey "^j", "macro"
Ctrl + M   Application.OnKey "^m", "macro"
Ctrl + 6   Application.OnKey "^6", "macro"
Ctrl + 7   Application.OnKey "^7", "macro"
Ctrl + <   Application.OnKey "^<", "macro"
Ctrl + >   Application.OnKey "^>", "macro"

Alt  + Q   Application.OnKey "%q", "macro"
Alt  + U   Application.OnKey "%u", "macro"
Alt  + S   Application.OnKey "%s", "macro"
Alt  + G   Application.OnKey "%g", "macro"
Alt  + J   Application.OnKey "%j", "macro"
Alt  + K   Application.OnKey "%k", "macro"
Alt  + L   Application.OnKey "%l", "macro"
Alt  + Z   Application.OnKey "%z", "macro"
Alt  + C   Application.OnKey "%c", "macro"
Alt  + B   Application.OnKey "%b", "macro"

Ctrl + Shift + Q   Application.OnKey "+^q", "macro"
Ctrl + Shift + E   Application.OnKey "+^e", "macro"
Ctrl + Shift + R   Application.OnKey "+^r", "macro"
Ctrl + Shift + T   Application.OnKey "+^t", "macro"
Ctrl + Shift + Y   Application.OnKey "+^y", "macro"
Ctrl + Shift + I   Application.OnKey "+^i", "macro"
Ctrl + Shift + A   Application.OnKey "+^a", "macro"
Ctrl + Shift + S   Application.OnKey "+^s", "macro"
Ctrl + Shift + D   Application.OnKey "+^d", "macro"
Ctrl + Shift + G   Application.OnKey "+^g", "macro"
Ctrl + Shift + H   Application.OnKey "+^h", "macro"
Ctrl + Shift + J   Application.OnKey "+^j", "macro"
Ctrl + Shift + K   Application.OnKey "+^k", "macro"
Ctrl + Shift + Z   Application.OnKey "+^z", "macro"
Ctrl + Shift + X   Application.OnKey "+^x", "macro"
Ctrl + Shift + C   Application.OnKey "+^c", "macro"
Ctrl + Shift + V   Application.OnKey "+^v", "macro"
Ctrl + Shift + B   Application.OnKey "+^b", "macro"
Ctrl + Shift + N   Application.OnKey "+^n", "macro"
Ctrl + Shift + M   Application.OnKey "+^m", "macro"



コメント

基本的にアルファベットキーで使えるようにしました。

実は忘れた頃に Excel でマクロにショートカットキーを割り当てたくなるので毎回調べていました。

2度と同じ調べ物はしたくないものですね。



以上

Python で OpenGL を使ってみたい



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


かなり前の記事になりますが、 Python から OpenCV を使って画像認識の記事を結構たくさん書きました。

C# からは OpenGL を使っていたのですが、 Python では使ってませんでした。

【参考にしたサイト】
WindowsのPythonでOpenGLを使う - TadaoYamaokaの日記

とりあえず参考にしたサイトのソースコードを動かしてひとまず描画をやってみます。



動作環境


Windows 10
・winpython 64bit 3.4.4



プログラム

PyOpenGL をインストールします。

画像の通りに pip でインストール出来ます。



あとは、参考にしたサイトによると GLUT なるものが必要みたいです。

.zip なのでさっさとダウンロードして解凍しましょう。

参考にしたサイトにもリンクがありますが、下記の通りです。

GLUT ダウンロードサイト
https://www.transmissionzero.co.uk/software/freeglut-devel/

ダウンロードするのは画像の赤四角で囲われているリンクのファイルです。



.zip ファイルを解凍して中の freeglut\bin\x64\ にある freeglut.dll を C:\Windows\System32 にコピーする。

ソースコード


from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
 
def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH)
    glutInitWindowSize(300, 300)     # window size
    glutInitWindowPosition(100, 100) # window position
    glutCreateWindow(b"teapot")      # show window
    glutDisplayFunc(display)         # draw callback function
    glutReshapeFunc(reshape)         # resize callback function
    init(300, 300)
    glutMainLoop()
 
def init(width, height):
    """ initialize """
    glClearColor(0.0, 0.0, 0.0, 1.0)
    glEnable(GL_DEPTH_TEST) # enable shading
 
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    ##set perspective
    gluPerspective(45.0, float(width)/float(height), 0.1, 100.0)
 
def display():
    """ display """
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    ##set camera
    gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
    ##draw a teapot
    glColor3f(1.0, 0.0, 0.0)
    glutWireTeapot(1.0)   # wireframe
#    glutSolidTeapot(1.0)  # solid
    glFlush()  # enforce OpenGL command
 
def reshape(width, height):
    """callback function resize window"""
    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(45.0, float(width)/float(height), 0.1, 100.0)
 
if __name__ == "__main__":
    main()



結果

参考にしたサイト通りのティーポットが表示されました!

図1 ティーポット



コメント

CAD やアニメーションアプリなんかを作りたいです。

全然関係ないですが、 winpython の情報ってすくないですよね。



以上

Python で LAN (ローカルエリアネットワーク)内のオンラインユーザーを探す



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


通信系のアプリを作ったらオンラインのユーザーを探さないといけないよな…と、まだ全然通信出来た試しも無いのにやってみようと思い立ちました。

結論を言うと動作が遅くて使い物にはならないプログラムが出来上がってしまいました。

書いたプログラムは LAN 内の IP アドレスからホストの逆引きを総当たりして逆引き出来たらオンラインで逆引き出来なければオフラインと判断するものです。

私のような初心者が道を間違えぬようにまとめておきます。



動作環境


Windows 10
・winpython 64bit 3.4.4



プログラム

ソースコード


###############################################################################
# ホスト一覧取得プログラム
###############################################################################
#==============================================================================
# ライブラリインポート
#==============================================================================
import socket
 
host = socket.gethostname()     # 自分自身のホスト名取得
ip = socket.gethostbyname(host) # 自分自身の IP アドレス取得
 
# 自分自身の IP アドレスのネットワーク部の取得
pos1 = ip.find('.')
pos1 = ip.find('.', pos1 + 1)
pos1 = ip.find('.', pos1 + 2)
network = ip[0:pos1+1]
 
# C クラスのプライベート IP アドレスを想定して全 IP に対してホスト名逆引きを試みる
for i in range(256):
    ip = str(network) + str(i) # IP アドレス作成
    print(ip + ' : ', end='')  # 表示
    try:
        host = socket.gethostbyaddr(ip) # IP からホスト名逆引き
        print(socket.gethostbyaddr(ip)) # 表示
    except socket.herror:
        print('') # エラーなら次の IP を逆引きする
        continue



結果

オンラインの端末を探すことは出来ていますが、動作がとても遅く、強制終了してしまいました。


In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/messenger030.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
192.168.220.0 :
192.168.220.1 :
192.168.220.2 :
192.168.220.3 : ('HOST-NAME', [], ['192.168.220.3'])
192.168.220.4 : ('HOST-NAME', [], ['192.168.220.4'])
192.168.220.5 :
192.168.220.6 :
192.168.220.7 :
192.168.220.8 :
192.168.220.9 :
192.168.220.10 :
192.168.220.11 :
192.168.220.12 :
192.168.220.13 :
192.168.220.14 :
192.168.220.15 :
192.168.220.16 :
192.168.220.17 :
192.168.220.18 :
192.168.220.19 :
192.168.220.20 :



コメント

通信系のアプリなんかではアプリ間でオンラインユーザーの確認をしているのだろうと思いました。

アプリ間の通信についてもっと勉強します。



以上

Python で通信プログラミング入門



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


最近、簡単な通信プログラムの必要性を漠然と考えています。

スケジュールアプリなど色んなアプリに付いてたら良いなぁと思うので調べてみました。

調べていくとリンクのサイトが分かりやすくて、サイトの『(1)ソケットクライアントでHTTPリクエスト』をそのまま動かして理解してみることにしました。

Pythonでソケットを使った単一のソケットサーバー VS 複数のソケットクライアントの双方向チャット。 - Qiita



動作環境


Windows 10
・winpython 64bit 3.4.4



プログラム

ソースコード


###############################################################################
# HTTP リクエスト テストプログラム
###############################################################################
#==============================================================================
# ライブラリインポート
#==============================================================================
import socket
 
# ソケット作成 -------------------------------------------------------------------
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
# 接続先 -----------------------------------------------------------------------
host = "www.yahoo.co.jp"
port = 80
 
# 接続 -------------------------------------------------------------------------
sock.connect((host, port));
 
# リクエスト内容作成 --------------------------------------------------------------
req = "GET / HTTP/1.1" + "\r\n\r\n";
 
# リクエスト ----------------------------------------------------------------------
sock.send(req.encode("UTF-8"));
 
# リクエストのレスポンスを受信 --------------------------------------------------------
read_size = 128
res = "".encode("UTF-8")
while True:
    try:
        sock.settimeout(3)
        t = sock.recv(read_size);
        res += t
        if (len(t) == 0) :
            print(res.decode())
            print("====サーバーからの読み取り終了====")
            break;
    except Exception as e:
        print(e);



結果

コピペしただけのソースコードできちんと動作しているので、他のサンプルも難なく動いてくれそうな予感‼︎

ブラウザってすごいですね。


In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/messenger000.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
timed out
timed out
timed out
HTTP/1.1 404 Not Found on Accelerator
Date: Tue, 04 Feb 2020 00:49:22 GMT
Connection: keep-alive
Via: http/1.1 edge1840.img.bbt.yahoo.co.jp (ApacheTrafficServer [c s f ])
Server: ATS
Cache-Control: no-store
Content-Type: text/html
Content-Language: en
X-Frame-Options: SAMEORIGIN
Content-Length: 6793
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<link rel="shortcut icon" href="https://s.yimg.jp/c/icon/s/bsc/2.0/favicon.ico" type="image/vnd.microsoft.icon" />
<link rel="icon" href="https://s.yimg.jp/c/icon/s/bsc/2.0/favicon.ico" type="image/vnd.microsoft.icon" />
<title>ページが表示できません - Yahoo! JAPAN</title>
<style type="text/css"><!--
/* yjTmplCommon */
body{margin:0;padding:0;text-align:center;font-family:"メイリオ", "ヒラギノ角ゴ", Helvetica, Arial, sans-serif;}dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,input,p,blockquote,fieldset,div{margin:0;padding:0;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}ul li, ol li{list-style:none;}table{margin:0;padding:0;border-collapse:collapse;border-spacing:0;font-size:100%;}caption{text-align:left;}table,pre,code,select,input,textarea,kbd,var,ins,del,samp{font-size:100%;}address,cite,dfn,em,strong,var,th,ins,del,samp{font-weight:normal;font-style:normal;}a img{border:0;}hr.yjSeparation{display:none;}fieldset{border:none;}#wrapper{text-align:left;font-size:medium;line-height:1.56;}#yjContentsBody{position:relative;}.yjGuid{display:block;height:0;overflow:hidden;font-size:0;line-height:0;text-indent:-9999px;}.yjSkip{display:block;height:0;overflow:hidden;font-size:0;line-height:0;text-indent:-9999px;}.yj950-1 #wrapper{ width:950px;margin:0 auto;padding:0 10px;}.yj950-1 #contents{text-align:left;}
 
/* fonts */
.s115{line-height:115%;}.s130{line-height:130%;}.s150{line-height:150%;}.yjXXL{font-size:x-large;voice-family:"\"}\"";voice-family:inherit;font-size:xx-large;font-size /**/:x-large;}html>body .yjXXL{font-size:180%;font-size/**/:xx-large;}.yjXL{font-size:large;voice-family:"\"}\"";voice-family:inherit;font-size:x-large;font-size /**/:large;}html>body .yjXL{font-size:150%;font-size/**/:x-large;}.yjL{font-size:medium;voice-family:"\"}\"";voice-family:inherit;font-size:large;font-size /**/:medium;}html>body .yjL{font-size:120%;font-size/**/:large;}.yjM{font-size:small;voice-family:"\"}\"";voice-family:inherit;font-size:medium;font-size /**/:small;}html>body .yjM{font-size:100%;font-size/**/:medium;}.yjMt{font-size:small;line-height:1.4em;voice-family:"\"}\"";voice-family:inherit;font-size:medium;font-size /**/:small;}html>body .yjMt{font-size:100%;font-size/**/:medium;}.yjS{font-size:x-small;voice-family:"\"}\"";voice-family:inherit;font-size:small;font-size /**/:x-small;}html>body .yjS{font-size:84%;font-size/**/:small;}.yjSt{font-size:x-small;line-height:1.3em;voice-family:"\"}\"";voice-family:inherit;font-size:small;font-size /**/:x-small;}html>body .yjSt{font-size:84%;font-size/**/:small;}.yjXS{font-size:xx-small;voice-family:"\"}\"";voice-family:inherit;font-size:x-small;font-size /**/:xx-small;}html>body .yjXS{font-size:70%;font-size/**/:x-small;}
 
/* masthead */
.yjmth{*height:1%;}.yjmth img{vertical-align:middle;border:0px;}.yjmth a{border:0px;}div.yjmthproplogoarea{float:left;}div.yjmthloginarea{float:left;margin:0px 0px 0px 3px;font-size:smaller;text-align:left;line-height:110%}div.yjmthcplogoarea{float:right;}div.yjmthcmnlnkarea{/*\*/float:right;/* */margin:10px 3px 0px 0px;font-size:smaller;text-align:right;line-height:110%;}br.yjmthclear{clear:both;}div.yjgrplink{text-align:right;font-size:smaller;line-height:115%;}div#music div.yjmthloginarea{margin-top:16px;margin-left:7px;}div#music div.yjmthcmnlnkarea{margin-top:26px;}div#music div.yjmthcplogoarea{margin-top:14px;}#masthead{width:100%;height:41px;margin:10px auto;text-align:left;}#masthead strong{font-weight:bold;}#masthead:after{content:"."; display:block; position:relative;height:0; clear:both; visibility:hidden;}/*\*/* html #masthead{height:1%;}* html #masthead .yjmth{margin:0;padding:0;}/**//* ie/mac \*//*/#masthead{display:inline-table;}/**/
@media print{div.yjmthloginarea{display:none;}}
 
/* footer */
#footer{text-align:center;}#footer address{padding:10px 0 20px;border-top:1px solid #ccc;font-size:small;line-height:1.4;}
 
/* contents */
.msg{margin:2.5em 0 4em;}.msg h1{font-size:130%;font-weight:bold;}.msg p{margin-top:2em;background-color:#fff;}.msg p.lnk{text-align:center;}
--></style>
</head>
<body class="yj950-1">
 
<div id="wrapper">
 
<div id="header">
<span class="yjGuid"><a name="yjPagetop" id="yjPagetop"></a><img src="https://s.yimg.jp/yui/jp/tmpl/1.1.0/audionav.gif" width="1" height="1" alt="このページの先頭です"></span>
<span class="yjSkip"><a href="#yjContentsStart"><img src="https://s.yimg.jp/yui/jp/tmpl/1.1.0/audionav.gif" alt="このページの本文へ" width="1" height="1" ></a></span>
<div id="masthead">
<div class="yjmth">
<div class="yjmthproplogoarea">
<a href="https://www.yahoo.co.jp/"><img src="https://s.yimg.jp/c/logo/f/2.0/yj_r_34.png" alt="Yahoo! JAPAN" width="136" height="34" border="0"></a></div>
<div class="yjmthcmnlnkarea">
<a href="https://www.yahoo.co.jp/">Yahoo! JAPAN</a>&nbsp;-&nbsp;<a href="https://www.yahoo-help.jp/">ヘルプ</a></div>
</div>
</div><!--/#masthead-->
 
</div><!--/#header-->
 
<hr class="yjSeparation">
 
<div id="contents">
 
<div id="yjContentsBody">
<span class="yjGuid"><a name="yjContentsStart" id="yjContentsStart"></a><img src="https://s.yimg.jp/yui/jp/tmpl/1.1.0/audionav.gif" alt="ここから本文です" width="1" height="1"></span>
 
<div id="yjMain">
<div class="yjMainGrid">
<div class="msg">
<h1>ページが表示できません</h1>
<p>障害が発生しているため、しばらくしてから、再度アクセスしてください。</p>
<p class="lnk"><a href="https://www.yahoo.co.jp/">Yahoo! JAPAN</a></p>
</div><!--/.msg-->
</div><!--/.yjMainGrid-->
</div><!--/#yjMain-->
 
</div><!--/#yjContentsBody-->
 
<div id="yjContentsFooter">
<span class="yjGuid"><img src="https://s.yimg.jp/yui/jp/tmpl/1.1.0/audionav.gif" width="1" height="1" alt="本文はここまでです"></span>
<span class="yjSkip">
<a href="#yjPagetop"><img src="https://s.yimg.jp/yui/jp/tmpl/1.1.0/audionav.gif" alt="このページの先頭へ" width="1" height="1"></a></span>
</div><!--/#yjContentsFooter-->
 
</div><!--/#contents-->
 
<hr class="yjSeparation">
 
<div id="footer">
<address><a href="https://privacy.yahoo.co.jp/">プライバシー</a> - <a href="https://about.yahoo.co.jp/docs/info/terms/">利用規約</a> - <a href="https://www.yahoo-help.jp/">ヘルプ・お問い合わせ</a><br>
Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved.
</address>
</div><!--/#footer-->
 
</div><!--/#wrapper-->
 
</body>
</html>
 
====サーバーからの読み取り終了====
 
In [2]:



コメント

背景・目的に貼ったリンクを書いた方には本当に感謝致します。

通信系のプログラムは初めてだったのですが、非常にいい感触がつかめました。

誠にありがとうございます。



以上

Python で最大公約数を求める



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


最大公約数を求めるなんて、とても地味ですが、図形を分割したりする際にとても重要だったりします。

かなり単純なソースコードと出力になりますが、入力値に対して最大公約数を求めます。



動作環境


Windows 10
・winpython 64bit 3.4.4



プログラム

ソースコード


###############################################################################
# 最大公約数計算プログラム
###############################################################################
#==============================================================================
# ライブラリインポート
#==============================================================================
import fractions
from functools import reduce
 
#==============================================================================
# 関数
#==============================================================================
def gcd(*values):
    return reduce(fractions.gcd, values)
 
#==============================================================================
# 最大公約数を求める値
#==============================================================================
a = 1000.0112354
b = 307
c = 401
 
#==============================================================================
# 最大公約数計算
#==============================================================================
aa = gcd(a, b, c)
 
#==============================================================================
# 表示
#==============================================================================
print('値 = ' + str(a) + ', '  + str(b) + ', '  + str(c))
print('最大公約数 = ' + str(aa))
print(' a/aa = ' + str(a/aa))
print(' b/aa = ' + str(b/aa))
print(' c/aa = ' + str(c/aa))



結果

3つの値 1000.0112354 、 307 、 401 の最大公約数は 2.2737367544323206e-13 と求まりました。

実際の出力結果を下に示します。


In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/Greatest-Common-Divisor000.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
値 = 1000.0112354, 307, 401
最大公約数 = 2.2737367544323206e-13
a/aa = 4398095924915771.0
b/aa = 1350200278908928.0
c/aa = 1763616650952704.0



コメント

実用的な関数ではないですが、最大公約数を戻ることは重要で有益な事なので、覚えておこうと思います。



以上