tk's BLOG

主にアプリ作成やプログラミングで得た様々な学びを備忘録として書いていきます。たまに思うままに日常の投稿もします。

<Python>ModuleNotFoundError解決法2

内容

下の以前の記事でpipを使うことにより、モジュールをインストールすることによって、ModuleNotFoundErrorを解決する方法を書きましたが、それでも解決しない場合の対処の提案として、この記事を書きたいと思います。

 参考記事:https://nayuho.hatenablog.jp/entry/2018/12/14/163948

前置き

以下のコマンドを実行して、エラー対象のモジュールをインストールしたとします。

今回はopencvのインストールを例にします。

$ pip install opencv-python

 

これを実行したのにも関わらず、以下のcv2をインポートしているPythonファイルが実行できなかった場合を想定します。

display.pyは標準入力から読み込ませた画像ファイルを表示させるプログラムです。

 

display.py 

import cv2

print("image_path?",end = " : ")
img_path = input()
img = cv2.imread(img_path)
cv2.imshow('sample', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


実行結果

f:id:tk0137:20200920131922j:plain

 

pipでopencvをインストールしたのに関わらずこのようなエラーが出る場合は、パスの指定が誤っており、正しくimportできていない可能性があります。

 

解決方法

私がこのエラーに直面した際に試した方法とその結果を以下に示します。

 

まず、site-packageを呼び出した際に、cv2.cpython-38-darwin.soファイルを呼び出せるように、以下のコマンドを実行してシンボリックリンクを設定します。

 

パスはopencvpythonのバージョンによって異なってくるので、以下のコマンドは参考にして実行してください。

$ ln -s /usr/local/Cellar/opencv/4.4.0_1/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-darwin.so ~/.pyenv/versions/3.8.5/lib/python3.8/site-packages/

 以下は実行例。

f:id:tk0137:20200921163919j:plain

 

上のコマンドを実行した上で再びdisplay.pyを実行します。

この時点で実行に成功するかもしれませんが、私は再び以下のような別のエラーに直面しました。

f:id:tk0137:20200921164316j:plain

 

これはnumpyのバージョンが古いことに起因して発生するエラーなので以下のコマンドを実行してください。

$ pip install numpy --upgrade

 

上のコマンドを実行した上で再びdisplay.pyを実行してみます。

この時点でも私はまだエラーが解決しなかったので、さらにパスを変更することにしました。numpyのバージョンは新しいのにその新しいバージョンではなくて古いバージョンを参照してしまっていることに起因していると考えられます。まず以下のようにfindコマンドを実行して、numpyがどこにあるかを確認します。

$ find / -name numpy

 

するとnumpyの所在が以下のように示されます。

f:id:tk0137:20200921165520j:plain

 

続いて、以下のようにpythonを実行して、パスを調べます。

f:id:tk0137:20200921165804j:plain

 

sys.pathを実行すると参照する順番にパスが表示されます。

この表示された順番にnumpyの参照先を探すと古いnumpyが参照されてしまうということですので、新たに上のものとは別のパスを追加してやる必要があります。

 

パスの追加には~/.bash_profileにfindコマンドで表示されていたpython3.8の下のsite-packageを選択します。

以下のコマンドを~/.bash_profileに追加します。

export PYTHONPATH="/usr/local/lib/python3.8/site-packages/"

 

参考までに。私は最後の行に追加しています。

f:id:tk0137:20200921170624p:plain

 

この~/.bash_profileの設定を反映するために以下のコマンドを実行します。

$ source ~/.bash_profile

 

ここまでの作業を行っても一度実行します。三度目の正直。

実行結果

f:id:tk0137:20200921171142j:plain

 

エラーが出ず、無事に標準入力を求める文字列が表示されました。

 

最後に

私もこのエラーにはかなり頭を悩まされたので、是非お役に立てることができれば幸いです。

訂正等ありましたら、コメント、お問い合わせ欄より内容を送信ください。

ありがとうございました。

 

 広告

デキるビジネスマンが学ぶプログラミング

全国送料無料!IT書、ビジネス書、資格書が豊富なSEshop

<Python>ModuleNotFoundError解決法

内容

よく遭遇するエラーの内、「ModuleNotFoundError」の解決方法を書きます。

 参考記事:https://www.sejuku.net/blog/50417

実行環境:macOS Catarina 10.15.6

日付:2020/09/21

前置き

以前の記事でpythonをインストールしました 。 

programmatictk0137.hatenablog.com

 

なので端末上でpythonと打つだけでpythonが使えるようになります。↓

f:id:tk0137:20200920124030j:plain

 

print()関数で適当な文字列を出力。↓

f:id:tk0137:20200920124402j:plain

 

exit()を入力してコマンド入力画面に戻る。↓

f:id:tk0137:20200920124514j:plain

 

また、別のファイルに書いたpythonコードも以下のようにコマンドで実行できます。↓

test.py

print("Hello World !!")

 

実行結果

f:id:tk0137:20200920125459j:plain

 

しかし、例えば次のプログラムを実行しようとするとエラーが発生してしまいます。display.pyは入力した画像ファイルを読み込んで表示するプログラムです。

 

display.py

import cv2
print("image_path?",end = " : ")
img_path = input()
img = cv2.imread(img_path)
cv2.imshow('sample', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

実行結果

f:id:tk0137:20200920131922j:plain

 

上のエラーではcv2というモジュールがないとエラーメッセージが出ています。

 

解決方法

この系統のエラーはpipコマンドを使用して対象のモジュールをインストールすることで解決します。

 

pipとはPythonのパッケージを管理するためのツールです。

 

今回の場合はcv2モジュールをインストールするため、下のコマンドを実行します。

$ pip install opencv-python

f:id:tk0137:20200920192723j:plain 

 

pipでエラーが出る場合

バージョンが古い可能性があります。

pipそのものにもバージョンがあります。月に1~2回くらいのペースで新しいバージョンがリリースされているように感じますので、適度に以下のコマンドを実行してpipをアップグレードしてください。

$ pip install --upgrade pip

f:id:tk0137:20200920193420j:plain

 

以上の作業をした上で、エラーが改善されない場合は、以下の記事に詳細に対策を書いてみたので参考にしてください。 

programmatictk0137.hatenablog.com

 

 

更新履歴

2020/09/21:エラーが改善されない場合の別記事へのリンク追加

 

広告

プログラミングはテックキャンプ

 

<Python>Pythonのインストール、バージョン変更。

内容

Pythonの学習を始めたい方に環境の作り方を書いていこうと思います。

 ※実行環境はmacOS Catalina 10.15.6

 

手順

参考サイト:https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b

まず、pythonのバージョンを切り替える便利なツールであるpyenvをインストールします。

以下のコマンドを実行します。

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

 

Homebrewをインストールしている場合は以下のコマンドでもインストールできます。

$ brew install pyenv

 

そしてpyenvコマンドのパスを通すため、以下の3行を.bash_profileファイルに設定を書きます。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

 

.bash_profileファイルを開くには以下のようにコマンドを入力します。

$ vim ~/.bash_profile

 

下の画像は実際の私の.bash_profileファイルの中。

f:id:tk0137:20200919161904j:plain 

これで端末上でpyenvコマンドが使えるはずですが、念のため下記のコマンドを実行して、設定を反映させてください。端末も一度開き直した方が良いかもしれません。

$ source ~/.bash_profile

 

 次にいよいよPythonをインストールしますが、まず下のコマンドでインストール可能なPythonのバージョンを確認します。

$ pyenv install --list

 

実行すると、インストール可能なPythonのバージョン名がずらりと表示されます。

以下の画像は実際に実行した時の一部です。

f:id:tk0137:20200919162629j:plain

 

次にインストールです。

現時点(2020年9月19日)でのPython3の最新版をインストールするならい下のコマンドを実行します。

$ pyenv install 3.8.5

 

するとログが流れるのでしばらく待ちます。

 インストールが終わったら、以下のコマンドを実行して、インストールしたバージョンが表示されるか確かめてください。

 $ pyenv versions

 

実行すると下の画像のようになります。左のアスタリスクは現在適用されているバージョンを示しています。デフォルトは「system」になっているはずです。

f:id:tk0137:20200919165846j:plain

 

次にバージョンを「system」から切り替えます。

「3.8.5」に切り替えたい場合は以下のコマンドを実行します。

$ pyenv global 3.8.5

 

これを実行した後にもう一度二つ上のコマンドを実行すると下の画像のように、アスタリスクの位置が3.8.5に移動していることが分かります。

f:id:tk0137:20200919170603j:plain

 

さらに以下のpythonコマンドで実際にPythonを動かして、画像のように指定したバージョンが表示されるか確認してください。

$ python --version

f:id:tk0137:20200919171100j:plain

 

これでpythonのバージョン設定は終了です。

ソースコードやプロジェクトに合わせて環境を自在に変えることができます。

 

最後に

簡単ではありましたがPythonの学習を始めるにあたり、覚えておくと便利なものを選んで紹介させていただきました。

 

以上に示したものは基本的なものになるので、細かい設定をしたい場合は、記事でも紹介した参考サイト、各種サイトをご覧ください。

 

分からないこと、問い合わせ、訂正等ありましたらコメント、プロフィールからの問い合わせフォームよりよろしくお願いいたします。

 

最後までありがとうございました。

 

広告

プログラミングはテックキャンプ

 

<勉強グッズレビュー> ゲルクッションを3ヶ月ほど使ってみた。

内容

私が勉強に役立つアイテムとして愛用しているゲルクッションについてレビューして見たいと思います。

使ってきた感想

最高です

今まで使ってきたクッションの中で間違いなく使用感がいいです。以前は長時間座って作業する際の尻の痛みに憂鬱になる日も少なくありませんでしたが、このクッションを使い始めてから尻の痛みに悩まされることが驚くほど減りました

時間を忘れて作業に没頭できる感覚が気持ちよく感じられています。

以下の各項目で詳細を書いていこうと思います。

商品の詳細

 値段:2150円

私は上の物を使っていますが、用途や色、大きさによって値段は様々です。

 

        

 

 

ここで、実際に私が使っている物を写真で分かりやすく取って見ました。尺として30cm定規を隣に置きました。

表側

f:id:tk0137:20200917231427j:plain

 

裏側

滑り止めとして突起が付いています。位置がずれにくいのでクッションの位置を気にせず作業ができます。

f:id:tk0137:20200917231417j:plain

 

中身

少し形が歪んでおりますが。弾性力があり、時間を置くことで元の形を維持することができます。

f:id:tk0137:20200917231434j:plain

 

ハニカム構造の部分のアップ写真

 隙間があるので通気性はとても良いです。

f:id:tk0137:20200917231439j:plain

 

カバーは取り外して畳んだり洗濯できます。

f:id:tk0137:20200917231422j:plain

 

食事や簡単な作業の時は気にしないと思いますが、長時間の作業、硬い椅子に座るとどうしても尻や腰の痛みが気になります。

 

私も資格試験、テスト勉強の時は集中したいのに腰や尻が痛くて休憩せざるを得なくなったりすると集中力が途切れてしまいます。

 

そこで一般的な布でできたクッションを買うことで痛みはやわらぎました。しかし布は長期間使用していると潰れてしまったり長時間の使用では硬い椅子の場合は徐々に痛み出してしまいました。中の綿の位置がずれたり洗濯に手間がかかったりするので長期的な目で見ても良い解決法にはなりませんでした。

 

そんなクッション探しに悩んでいた私が、このゲルクッションに出会うことで大きく変わったと感じてます。

 

このゲルクッションの特徴は特にこの3点だと思います。

・人間工学に基づくデザイン

・超柔らかい&低反発クッション

・通気性抜群&蒸れない

 

・人間工学に基づくデザイン

 卵をクッションの上に置いて座っても割れないという映像を見たことがあるかもしれません。体重を分散することで正しい姿勢を保ったり、痛みを軽減します。

 

・超柔らかい&低反発クッション

高弾力ポリマー材料を使用しているので、強い力を加えても元の形に戻るため、耐久性に優れています。また上の写真にもあるようにゲルは正六角形を敷き詰めたハニカム構造により、強度を効率よく上げています。

 

・通気性抜群&蒸れない

またゲルは表から裏に空気が流れるような隙間があるので長時間座っても蒸れることはありません。

 

これらの特徴によって、様々な用途に用いることができます。

 

私のように作業用の椅子に使うこともできますし、車の運転席に敷くことで長時間の運転の疲れを軽減することができます。座布団として使ったり、オフィスに持ち込んで自分の椅子に置いて使うこともできます。

また姿勢を保つこともできるので車椅子など、腰に負担をかけたくない場面にも役立ちます。

 

最近ではスタンドデスクの導入も進んではいますが、現代の日本ではまだまだ座って作業することは多いと思います。なので誰にも各々の環境に合わせて役立つ場面を見出せることは間違いありません。

 

最後に

初めての商品のレビューを書いて見ましたが、言葉にすると難しい物で、少しでも良さが伝わればと思いました。

 

私が普段から役立てているアイテムは以前から紹介したいと考えていたのですが、一番最初に思いついたのがこのゲルクッションでした。私が座って作業している時はいつも使っていて、愛着が湧いていたのかもしれません。

 

勉強に役立つアイテムといえば、文具や教材のレビューが一般的かと思いましたが、今回はその勉強はもちろん様々な作業をしたから支える重要アイテムということでゲルクッションを紹介させていただきました。

 

硬い椅子の作業やクッションがくたびれてきて尻や腰が痛くなってきたという悩みを抱えているあなた。是非このゲルクッションをご検討ください。

 

広告

美姿勢座椅子

 

<Unix>ファイル名とディレクトリ名の色を分ける

内容

lsコマンドを実行した時、下の画像のように、カレントディレクトリ直下にあるファイル、ディレクトリの一覧が表示されると思います。

f:id:tk0137:20200916221433j:plain

しかしこれではどれがファイルでどれがディレクトリかが分かりにくいと思います。今回はファイルの種類ごとに色付けして判別しやすいようにしたいと思います。

  ※実行環境:macOS Catalina 10.15.6

手法

まず以下のコマンドを実行して、シェルの種類を確認します。

$ echo $0

f:id:tk0137:20200916221601j:plain

私の場合はbashなのでこれを前提に作業を進めていきます。

 

・lsコマンドに-Gオプションをつける。

f:id:tk0137:20200916221951j:plain

その場しのぎ的な方法ですが、一番シンプルな方法です。ですが私の場合はいちいちコマンドをつけるのも面倒だったので、これをデフォルト化しました。

その手法が以下の方法です。

 

・シェルのprofileファイルにlsコマンドの設定を書き込む。

これを行うことで下の写真のようにlsコマンドだけで色付きでファイルを表示してくれます。

f:id:tk0137:20200916221603j:plain

まずは以下のコマンドで.bash_profileを開きます。

$ vi ~/.bash_profile 

そして開いた.bash_profileに以下の設定を書き込みます。

alias ls='ls -G' 

私は以下のように、書き込みました。他にもいろいろ書き込んであって見にくいかもしれませんが参考までに。

f:id:tk0137:20200916221706j:plain

これを書き込んで保存した後にlsコマンドを実行したのが二つ上の写真になります。

設定を変えた後にlsコマンドを実行しても色が変わらない場合は、コマンドを入力する端末を再起動するか、以下のコマンドを実行して設定を反映させて見てください。

$ source ~/.bash_profile

最後に

簡単ではありましたが、作業の効率化の一助となれば幸いです。

ありがとうございました。

 

広告

全国送料無料!IT書、ビジネス書、資格書が豊富なSEshop

 

<Java>麻雀ゲーム作成に向けたプログラミング

内容

私の趣味に麻雀があるという話は置いておいて、最終的には麻雀の一人プレイができる様なゲームを作ることを視野に入れ、javaを使用したプログラミングの勉強の過程を書いていこうと思います。

参考にしたサイトhttps://docs.pyq.jp/python/library/class.html

         https://java.keicode.com/lang/package-sourcepath.php

参考にした書籍

 読むだけでかなりjava言語特有のオブジェクト指向の中身が理解できる。上巻もあり。

学んだ事

・クラスのアクセス

・クラス拡張

・乱数の発生

 

詳しい演習内容

以下のファイルを実行しました。

HelleWorld.java

Person.java

TestApp.java

Mahjang.java

 

 HelloWorld.java

public class HelloWorld{
        public static void main (String[] args){                 System.out.println("HelloWorld !!");
        } }

 基本中の基本。

コンパイルからの実行は以下の通り。

$ javac Helloworld.java

 →lsコマンドでHelloWorld.classができているか確認。

$ java HelloWorld

<実行結果>

f:id:tk0137:20200915133946j:plain

 

Person.java

public class Person {
        //フィールド
        private int age;
        private String name;
          //コンストラク
        public Person(int age, String name) {
                this.age = age;
                this.name = name;
        }
        //メソッド
        public int getAge(){
                return age;
        }         
public void setAge(int age){
                this.age = age;
        }
          public String getName(){
                return this.name;
        }
          public void setName(String name){
                this.name = name;
        }
          public static void main(String[] args) {
                Person man = new Person(30, "Taro");
                System.out.println("age : " + man.getAge());
                System.out.println("Name : " + man.getName());
        } }

 <実行結果>

f:id:tk0137:20200915133945j:plain

 

TestApp.java

Person.javaのPersonクラス拡張したEmployeeクラスの実装。

class Employee extends Person {
        private int employeeID;
 
        public Employee(int age, String name, int employeeID){
                super(age, name);
                this.employeeID = employeeID;
        }
 
        public int getEmployeeID(){
                return this.employeeID;
        }
 
        public void setEmployeeID(int employeeID) {
                this.employeeID = employeeID;
        }
}
public class TestApp{
        public static void main(String[] args){
                Employee p = new Employee(20, "Ichiro Suzuki", 100);
                System.out.println(p.getAge());
                System.out.println(p.getName());
                System.out.println(p.getEmployeeID());
        }
}

 →コンパイル後、TestApp.classに加え、Employee.classができていることを確認。

<実行結果>

f:id:tk0137:20200915134156j:plain

 

ここまでのまとめ

クラスは他のjavaファイルで定義したクラスからも参照できる。

 →TestApp.javaの中のEployeeクラスは別ファイルのPerson.javaのPersonクラスを拡張

  している。

 

publicクラスは1つファイルにつき1つまで宣言可能。

 →各ファイルのpublicなclass

  ・HelloWorld.java : HelloWorldクラス

  ・Person.java : Personクラス

  ・TestApp.java : TestAppクラス

   ※ファイル名とpublicクラスの名前は一致させる。

 

拡張したクラス(サブクラス)は拡張元のクラス(スーパークラス)のフィールドやメソッドを使える。

 

麻雀ゲームのプログラム作成(一部)

進捗にはなりますが、乱数を利用して配牌をランダムに生成し、表示させるプログラムを書きました。

 

Mahjang.java

import java.util.Random;
 
public class Mahjang{
        public static void main(String[] args){
                String[] pai = {"一索", "二索", "三索", "四索","五索","六索","七索","八索","九索","一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒","一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬","東","南","西","北","白","發","中"};
                 
                Random r = new Random();
                for(int i=0 ; i<13; i++){
                        String tehai = pai[r.nextInt(pai.length)];
                        System.out.print("|" + tehai);
                }
                System.out.println("|");
        }
}

<実行結果>

ランダム性を確認するため、三回実行した。

f:id:tk0137:20200915133948j:plain

<課題>

一見問題なさそうに見えるが、同じ牌が5個以上出現する可能性がある。

 麻雀牌は同じ牌は4つしかない。よってランダム性を保ちながらも出現回数に制限をつけな

 ければならない。

 

牌の種類ごとに並び替えが実装されていない

 麻雀では役をそろえる必要がある。役には牌の並びが重要になるので、円滑にゲームを進め

 るために並び替えの実装は必要不可欠である。

 

最後に

java言語の基礎をさらいつつ、簡単なプログラムを実装するという遊びのような内容になってしましましたが、実践は体に覚えさせる一番良い方法だと思うので、簡単なことでも手を抜かずに実行しました。

麻雀に関しては役の種類や点数計算の実装などやることが豊富なので、完成には長期にわたる作業が必要になるかと思いますが、これからも定期的に進捗を書いていきたいと思います。ありがとうございました。

 

広告

プログラミングはテックキャンプ

 

<書評>『心理学から考えるホモサピエンス』

内容

私が読んでいて面白かった本、タイトルにもある通り『心理学から考えるホモサピエンス』を読んで感じたこと、考えたことを書いてみようと思います。

 

書籍の詳細 

:アラン・S ・ミラー、サトシ・カナザワ

:伊藤 和子

出版社:パンローリング株式会社

値段:2000円+税

   1980円(kindle版)

 

読んだきっかけ

心理学にもともと興味があったこと。

進化という遺伝子レベルの心理や行動を知ることができると思ったこと。 

 

本の構成

序章

第1〜9章

 

大まかな構成は上のようになっている。第1・2章は導入部、第3〜8章は問題に対する議論、第9章はあとがき、参考文献となっている。

 

特に第3章からは章ごとにテーマに沿った問とそれに対する答えを導き出すといった形式になるので章の中でもさらに細かく分かれてるといったイメージです。これらのといは全てで28個あり、それらの問全てに対して進化心理学の観点から答えを導き出していきます。なので詳細に自分が読みたい部分を選んで読むことができます。

 

今回はこの第3〜8章の中から私が特に面白いと思った内容を28の問の中からの3つご紹介したいと思います。

 

本の内容(厳選)

以下の3つの項目について少しだけまとめてみたいと思います。

・息子がいると離婚率が低くなるのはなぜか

・だめな父親は多いのに、だめな母親が少ないのはなぜか

ビル・ゲイツポール・マッカートニーと犯罪者に共通するものは何か

 

・息子がいると離婚率が低くなるのはなぜか

まず、「社会学統計学の調査で、息子がいる家庭では離婚率が低くなることが分かっている」という知識を前提にこれはなぜなのかということを進化心理学の観点から答えを導いていきます。

 

皆さんならどう考えるでしょうか。私は、現代では結婚したほとんどの夫婦は夫の方の苗字を継ぐということから、息子に対して積極的に育児参加することで自分の名を後世に残せる確率を高くしたいという本能的なものが働いているものというくらいに考えていました。このような考え方は実は進化心理学の考え方からかけ離れていることではなく、かなり的を射ている考えでした。

 

しかし、この問に対する根拠を娘がいる場合の家庭についても詳しく本書では述べられています。娘の場合は、将来的な配偶相手にとっての価値は富や財産ではなく若さと肉体的な魅力で決まるため、そのために親がしてやれることは少ない、よって特に父親の場合は育児参加する価値が息子の場合より低くなってしまうことが離婚率の高さの原因と考えられているんだとか。

 

逆に息子の場合は将来的には権力や財産によって配偶相手にとっての価値が高まるため、父親が蓄えた財産を息子に継がせることで自分の遺伝子を広げられるため、積極的に育児に参加するらしいです。

 

これは進化の過程で、男性はより権力や財産を作り出す方に、女性は子を産み育てるために肉体的な魅力を重視する方向に遺伝子の淘汰が進んだ結果であることによる進化の過程も深く関わっています。

 

・だめな父親は多いのにだめな母親が少ないのはなぜか

この問の中で面白い言葉が出てきます。

 

「ママのベイビーはパパにとってはメイビー」

 

どういうことかというと子供の母親は確実に判定ができるけど、父親は確かめることができないということです。これを父性の不確実性と言います。

 

母親は自分の体内で子供が育つため、確実にその子は母親の遺伝子をもっており、積極的にその子供に時間や財産を費やしますが、父親の遺伝子は見た目だけでは判断できないため、別の父親の子供である確率も否定できないのです。

 

よって父親は母親よりは1人の子供に労力をかけるよりは複数の女性と関係を持ち、なるべく多くの子供をつくる傾向があるのです。

 

このような男女の違いも進化心理学的にはそれぞれの繁殖の戦略として淘汰された結果であると論じています。

 

以上のことから父親は離婚した後、法定の命令にも関わらず、子供への教育費の支払いを怠ったり、教育義務を怠ったりする傾向にあると結論づけています。

 

ビル・ゲイツポール・マッカートニーと犯罪者に共通するものは何か

これは世の中の成功者と犯罪者も進化心理学から見ればその行動の根源にあるものは本質的には同じであるという興味深い答えを出しています。

 

結論から記述すると、犯罪も才能の発揮も、ライバルに勝とうとする欲求の現れということです。

 

方法は大きく違えど、この点において成功者も犯罪者も同じことをしているというのです。さらに突き詰めるとこのような行動の根源にあるのは全て女性に認めてもらいたいがための行動だと述べています。

 

ビル・ゲイツをはじめとしたコンピュータの開発者や研究者、ポール・マッカートニーのような音楽家や画家のような芸術家がソフトウェアを開発したり研究に没頭したり作曲したり絵を描いたりするのは全てが女性のためだというのだから驚きです。

 

このような極端な言い方では女性はなんのために創作活動をしているのだろうかと疑問になってしまうところではありますが、これも進化心理学の観点から導き出された一意見として受け入れることで新たな視点で人生を生きていくことができると思いました。

 

もちろんこれは傾向として男性に多くみられるというだけで女性の中にも世に秀でた才能を発揮することもあれば犯罪を起こすこともあるということです。

 

最後に

上に示した3の問はどれもとても興味深い内容でしたが、これらは本書の本の一部のコンテンツにしか過ぎません。

これを読めば普段意識していない些細な行動も、人の進化の過程で最適されたものなのかと考えるようになったり、あなたが疑問に思う人の行動に有益な答えを与えてくれるかもしれません。

なぜという好奇心だけでも読み進められる構成になっているので、気になる方は是非読んでみてください。

 

広告