よちよち歩きのpython3 : pycharm-edu 、数値計算 ( SciPy NumPy)　そして　chatGPT

##紅茶のように　緑茶に砂糖をいれて飲んでみた、結構いけてる。なお　archman で以下はしました。 C言語は難しいので　大工の棟梁のもとで修行しないと一人前になれない。しかしPythonは日曜大工DIYの世界なのでTV講座でなんとかなる、一人でもいける。

||
|:---|
|攻撃者になったつもりで考えることです。　攻撃者がどうやったらコードを悪用するだろうか|
|攻撃者のかわりに　ヤクザといってもいいですね|
|彼らは善意なる考えはすべて却下。　悪意に満ちた考えの中で　おばかなものは採用せず、　よく考え練られたもののみを採用する。　つまり　高度に知的レベルの高い悪魔的存在|


## １)アイドルを探せ

idle-python3.7-assets 1.0-1
をAURでいれると

Developmentのところに　IDLEがでてくる、でも使わないほうがいい、でも一応次図。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/e2f5298c-7577-e07b-4442-7cbe7e576e4f.png)

##  使うべきは　ずっと下の　C)に書いた　pycharm-edu　と思う　



##2) 簡易計算機

単なる端末での上で
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/4c319df8-8ad3-33a0-f133-b68f9382d1cc.png)


##3) よちよち歩きには
https://pycamp.pycon.jp/textbook/1_install.html

|七転び　八転びでやってます|
|:---|
|**独学プログラマー　（日経BP）**は　とっつきやすくて　クラスをも含む全体像はながめられるけど、　英語がOkなら　**　https://automatetheboringstuff.com/　**のほうがはるかに懇切丁寧でいい。なお独学プログラマーの正誤表は　http://public-errata.appspot.com/errata/book/9784822292270/　にある　|

この本の良さは例えば
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/e8db81fd-cc93-0581-089c-02659fea114d.jpeg)



##4)関数
```
>>> def f(x):
...     return x**3
... 　　　　　　　　　　注：一行空けてね
>>> y=f(5)
>>> print (y)
125
```


##5)input

```
>>> age = input("irete:") 　　注：末尾の「:」忘れないでね
irete:20
>>> int_age=int(age)
>>> if int_age < 30:
...     print("young")
... else:
...     print("old")
... 
young

```


```
>>> def even_odd(x):
...     if x % 2 == 0:
...         print("even")
...     else:
...        print("odd")
...                   注：一行空けてね
>>> even_odd(2)
even
>>> even_odd(3)
odd
```

```
#!/bin/python3
def even_odd():
    n = input("type a number")
    n = int(n)
    if n % 2 == 0:
        print("n is even.")
    else:
        print("n is odd.")

even_odd()
even_odd()
even_odd()

---------

./1.py 
type a number15
n is odd.
type a number18
n is even.
type a number


```


##6) scope

```
cat scope.py 
#!/usr/bin/python3

x = 1
y = 2
z = 3


def f():
    print(x)
    print(y)
    print(z)


f()

-----------
$ ./scope.py 
1
2
3

```

##7) module

|https://docs.python.org/ja/3/py-modindex.html にmathなどのモジュールが載ってる|
|:---|

```
open@t620 tstp $ pwd
/home/open/tstp



open@t620 tstp $ cat hello.py 
#!/bin/python3

def print_h():
    print("hellow")



open@t620 tstp $ cat project.py 
#!/bin/python3
import hello
hello.print_h()  注：左詰め！



open@t620 tstp $ ./project.py 
hellow
```


##　無料でも英語でんねん）
https://automatetheboringstuff.com/


##A) youtube 上で講義がある
https://www.youtube.com/watch?v=ZGHsG2hxJrY&list=PLwgFP6xz77Rxol-cydiwuJSeVFK61rGXP&index=1

https://www.youtube.com/watch?v=VCOXtOicsRA


##B) anaconda がAURにある

https://knowledge.sakura.ad.jp/17235/
によると　
科学技術計算においてはCやC++、Fortranといったプログラミング言語のほか、
**Matlab** やその互換環境、Mathematica、Rといったソフトウェアが多く用いられていた。

|Anacondaの特徴としては、デフォルトでPythonに加えて科学計算に必要なライブラリやさまざまなユーティリティがインストールされることが挙げられる。これをインストールするだけで、とりあえずすぐにPythonや科学計算のための主要ライブラリが利用できるようになる。GUIでパッケージのインストールやアップデート、検索を行えるツールも同梱されている。|
|:---|


```
 pacman -U anaconda-2019.03-1-x86_64.pkg.tar.xz 
loading packages...
resolving dependencies...
looking for conflicting packages...

Package (1)  New Version  Net Change 

anaconda     2019.03-1    3285.96 MiB

Total Installed Size:  3285.96 MiB

:: Proceed with installation? [Y/n]

Please run

	$ source /opt/anaconda/bin/activate root
	$ source /opt/anaconda/bin/deactivate root

でも　ここからはCUIだねえ、　よちよち歩きには到底無理

```


##C) pycharm-professional 2019.1.3-1 もAURにある
こっちは　GUIだね

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/958eda5b-560a-d80a-c73f-f70d3cd90a07.png)

しかしpycharm-professionalは優良なので
pycharm-edu.tar.gz　を利用してみることとした。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/7ef049e2-1d76-c5ee-7046-5aafc83b6671.png)

で親切なマニュアルは　https://pleiades.io/help/pycharm/guided-tour-around-the-user-interface.html
　にある

以下のスクリプトで　先頭行に　#!/bin/python3　がつく

```
for x in `ls *.py`
do
echo '#!/bin/python3' >p.py
cat $x >> p.py
cp p.py 1-$x
chmod +x 1-$x
done
```
でたとえば　

cat 1-hello.py 

```
#!/bin/python3
# This program says hello and asks for my name.

print('Hello world!')
print('What is your name?') # ask for their name
myName = input()
print('It is good to meet you, ' + myName)
print('The length of your name is:')
print(len(myName))
print('What is your age?') # ask for their age
myAge = input()
print('You will be ' + str(int(myAge) + 1) + ' in a year.')
```

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/27cd15ad-cc45-e46e-e317-b2a42e20898c.png)












-------
## X1)　科学計算
-------
https://www.ibm.com/developerworks/jp/opensource/library/os-beginners-guide-python/index.html

yayを　pacman -Sy yay　で入れたあと


```
$ yay pip-tools

1 aur/pip-tools 4.1.0-1 (+9 1.29%) 
    A set of tools to keep your pinned Python dependencies fresh.
==> Packages to install (eg: 1 2 3, 1-3 or ^4)
==> 1

:: Checking for conflicts...
:: Checking for inner conflicts...
[Repo: 21]  python-click-7.0-1  python-msgpack-0.6.1-1  python-urllib3-1.25.3-1  python-chardet-3.0.4-2  python-idna-2.8-1  python-requests-2.22.0-1  python-cachecontrol-0.12.5-4  python-colorama-0.4.1-1  python-distlib-0.2.9-1  python-distro-1.4.0-1  python-webencodings-0.5.1-2  python-html5lib-1.0.1-3  python-lockfile-0.12.2-4  python-pytoml-0.1.21-1  python-more-itertools-4.3.0-1  python-zipp-0.6.0-1  python-importlib-metadata-0.19-1  python-pep517-0.6.0-1  python-progress-1.5-1  python-retrying-1.3.3-4  python-pip-19.0.3-1
[Aur: 1]  pip-tools-4.1.0-1

:: Downloaded PKGBUILD (1/1): pip-tools
  1 pip-tools                        (Build Files Exist)
==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> N

:: Parsing SRCINFO (1/1): pip-tools
[sudo] password for fujitsu: 

resolving dependencies...
以下省略で
(1/1) installing pip-tools                         [----------------------] 100%
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...

確かに
$ pacman -Q| grep pip
libpipeline 1.5.1-1
pip-tools 4.1.0-1
pipewire 0.2.6+1+g37613b67-1
python-pip 19.0.3-1
と入った

```

```
# pip install numpy
# pip install matplotlib
```

python3して

```
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.arange(0, 5, 0.1)
>>> y = np.sin(x)
>>> plt.plot(x,y)
>>> plt.show()
```

したら　以下のグラフがでます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/1c7a8807-6023-4091-72ca-342c669603dd.png)

その後

```
# pip install scipy
```

して

|科学計算の力を Python にインポートする.Python で使用することになる強力な科学計算モジュールとしては、NumPy と SciPy の 2 つが挙げられます。NumPy には多数の強力な機能が含まれていますが、なかでも、ここで特に興味深いのは、同じデータ型の数値の集合を作成して、array という名前の単一の変数に割り当てることができる機能です。また、このモジュールには線形代数、フーリエ変換、乱数を処理する機能も幅広く揃っています。SciPy は、NumPy に加え、他の多数のパッケージからなる包括的な科学計算エコシステムです。|
|:---|

となりました。

```
# pip install sympy
Collecting sympy
  Downloading https://files.pythonhosted.org/packages/21/21/f4105795ca7f35c541d82c5b06be684dd2f5cb4f508fb487cd7aea4de776/sympy-1.4-py2.py3-none-any.whl (5.3MB)
     |████████████████████████████████| 5.3MB 3.1MB/s 
Collecting mpmath>=0.19 (from sympy)
  Downloading https://files.pythonhosted.org/packages/ca/63/3384ebb3b51af9610086b23ea976e6d27d6d97bf140a76a365bd77a3eb32/mpmath-1.1.0.tar.gz (512kB)
     |████████████████████████████████| 522kB 1.7MB/s 
Installing collected packages: mpmath, sympy
  Running setup.py install for mpmath ... done
Successfully installed mpmath-1.1.0 sympy-1.4
# exit
exit

$ cat k-sosuu.py 
from sympy import sieve
print([i for i in sieve.primerange(10000,11000)])
として

$ python3 k-sosuu.py 
[10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957, 10973, 10979, 10987, 10993]

と　10000と11000の間の素数がでてくる。
面白い

```

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

## X-chatGPT) 　恐ろしいことにchatGPTが　pythonのプログラムを書いてくれる

例えば

```
あるフォルダにある画像を　すべて640x480にする　python3のプログラムを教えて

```

と言うと

```
以下は、Pillow（Python Imaging Library）を使用して、指定されたフォルダ内のすべての画像を640x480に変換するPython 3プログラムの例です。

python
Copy code
from PIL import Image
import os

folder_path = "path/to/folder"

# 指定されたフォルダ内のすべてのファイルをループ処理
for filename in os.listdir(folder_path):
    # ファイルが画像であることを確認
    if filename.endswith(".jpg") or filename.endswith(".png"):
        # 画像を開いてリサイズ
        img_path = os.path.join(folder_path, filename)
        with Image.open(img_path) as img:
            resized_img = img.resize((640, 480))
            # 元の画像を上書きしないように、新しいファイルに保存
            new_filename = os.path.splitext(filename)[0] + "_resized" + os.path.splitext(filename)[1]
            new_img_path = os.path.join(folder_path, new_filename)
            resized_img.save(new_img_path)
このプログラムは、指定されたフォルダ内のすべてのjpgまたはpngファイルをループし、各ファイルを開いて、画像を640x480にリサイズし、新しいファイル名で保存します。
```

だ。

これにちょっと手を加えて

ちょっとだけ変えます

 cat 640x480.py 

```
#!/usr/bin/python3


from PIL import Image
import os

folder_path = "./"

# 指定されたフォルダ内のすべてのファイルをループ処理
for filename in os.listdir(folder_path):
    # ファイルが画像であることを確認
    if filename.endswith(".jpg") or filename.endswith(".png"):
        # 画像を開いてリサイズ
        img_path = os.path.join(folder_path, filename)
        with Image.open(img_path) as img:
            resized_img = img.resize((640, 480))
            # 元の画像を上書きしないように、新しいファイルに保存
            new_filename = os.path.splitext(filename)[0] + "_resized" + os.path.splitext(filename)[1]
            new_img_path = os.path.join(folder_path, new_filename)
            resized_img.save(new_img_path)

```

こうして　やってみます

```
$ ls -l *.jpg
-rw-r--r-- 1 jaro jaro  27060  3月 19 12:32 DAC-1.jpg
-rw-r--r-- 1 jaro jaro 108329  3月 19 12:32 DAC.jpg

$ ./640x480.py 
$ ls -l *.jpg
-rw-r--r-- 1 jaro jaro  27060  3月 19 12:32 DAC-1.jpg
-rw-r--r-- 1 jaro jaro  27971  3月 19 12:33 DAC-1_resized.jpg
-rw-r--r-- 1 jaro jaro 108329  3月 19 12:32 DAC.jpg
-rw-r--r-- 1 jaro jaro  21658  3月 19 12:33 DAC_resized.jpg
```

ということは　トヨタあるいはハウスの下請けのつくる部品は　chatGPTが作ってくれます
だから　これからのプログラマーは全体を統合する　大工の棟梁の　力が必要です