2021-04-01から1ヶ月間の記事一覧

PythonのTkinterで簡単なタイピングソフトを作る 表示された1文字のアルファベットを入力するもの

import tkinter import tkinter.font import random key = '' #押されたキーの内容 ch = '' #ユーザーが入力するべき文字 def key_down(e): global key key = e.keysym def key_up(e): global key key = '' def set_ch(): global ch ch = chr(random.randint…

PythonのTkinterでキーが押されたイベントを取得してキーコードを表示する

import tkinter def key_down(e): print("KEYCODE:" + str(e.keycode)) root = tkinter.Tk() root.bind("<KeyPress>", key_down) root.mainloop()</keypress>

Debian系LinuxでPythonのTkinterをインストールする方法

$ sudo apt install python3-tk下記のコマンドでインストール後の動作確認ができるらしい。 $ python3 -m tkinter

Pythonのリストのコピー コピーを変更すると元のリストも変更される

Pythonでリストが代入されている変数を他の変数に代入すると、2つの変数は同じリストを指すようになるらしい。 >>> a = [1, 2] >>> b = a >>> id(a) 140313826148872 >>> id(b) 140313826148872 >>> b[0] = 3 >>> b [3, 2] >>> a [3, 2] 下記のようにすると…

市町村のホームページをランダムに表示するPythonのプログラム

ホームページのURLは下記のサイトの「JapaneseLocalGovernmentCitiesOfficialSites.txt」を使用しました。 linkdata.org import webbrowser import random f = open('JapaneseLocalGovernmentCitiesOfficialSites.txt', 'r') all_text = f.readlines() f.clo…

Cでwriteシステムコールを使ってint型の数値を数字(16進数)に変換して表示する

NASMを勉強していて、NASMだと数値を数字に変換して画面に表示させるのが結構難しいのだということを知って、Cで同じようなことをやってみた。 #include <unistd.h> #define DIGITS_OF_INT (sizeof(int) * 2) char hex_chars[] = "0123456789ABCDEF"; void print_int(i</unistd.h>…

基本情報技術者試験 ハッシュ法

10進数で5桁の数を、その各桁の数の合計を13で割った余りをハッシュ値として配列に格納するという問題をみて、すべての5桁の数についてハッシュ値を調べるとそれぞれのハッシュ値が何回使われるのかを調べてみた。Pythonのプログラム def sum_of_digits(n): …

Pythonで2次元配列を(reversed -> アンパック -> zip)で90度右回転させる

実用性はなさそうだが、勉強のために2次元配列を90度右回転させるには、 行単位で逆順に並べ替えて、行と列を入れ替えればいい。 >>> import pprint >>> a = [[1,2,3], [4,5,6], [7,8,9]] >>> pprint.pprint(a, width=20) [[1, 2, 3], [4, 5, 6], [7, 8, 9]]…

基本情報技術者試験 令和元年度 秋期 午前 問9 2次元配列90度右回転 Python

Python def display(data): for line in data: for ch in line: if ch: print('*', end='') else: print(' ', end='') print('') print('') a = [[0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0],…

基本情報技術者試験 令和元年度 秋期 午前 問8 スタック Python

Python str = ('A', 'C', 'K', 'S', 'T') stack1 = [] stack2 = [] stack3 = [] stack1.append(str[0]) stack2.append(str[1]) stack3.append(str[2]) stack1.append(str[3]) print(stack1.pop(), end="") stack1.append(str[4]) print(stack1.pop(), end=""…

2進数文字列のうち3の倍数のものを受理するオートマトン

Pythonのautomata-libを使いました。 pypi.org オートマトンの説明 状態q0:3で割ったあまりが0である状態 状態q1:3で割ったあまりが1である状態 状態q2:3で割ったあまりが2である状態初期状態:q0 受理状態:q0入力文字:{'0', '1'}<状態遷移> 2進数を…

Pythonでリストをループ処理するときにインデックスを取得する方法

enumerateというものを使うとできるそうです。 lst = ['a', 'b', 'c'] for idx, elem in enumerate(lst): print(idx, elem) 実行結果 0 a 1 b 2 c

Gaucheを使うときはrlwrapを一緒に使うと便利です

UNIXのシェルなどでは、過去に入力したコマンドを上矢印キーで再利用できますが、 Scheme処理系のGaucheではそれができません。 rlwrapというソフトをGaucheと一緒に使うとそれができるようになります。rlwrapのインストール $ sudo apt install rlwrap起動…

基本情報技術者試験 整数式を受け取ってその値を返すプログラム

下記の問題のプログラムをCで実装しました。基本情報技術者試験 平成30年度秋期 午後試験 問8 データ構造及びアルゴリズム 整数式の解析と計算計算の途中の変数の状態を表示するようにしました。 #include <stdio.h> #include <stdlib.h> void print_status(int *value, char *o</stdlib.h></stdio.h>…

基本情報技術者試験 ファイルの内容を16進数で表示する

令和元年度秋期の基本情報技術者試験の午後問題の問9の「ファイルの内容を16進数で表示する」プログラムを実行しました。 #include <stdio.h> #include <stdlib.h> #define WIDTH 60 #define MASKCHR '.' void dump(char *filename, long from, long to) { FILE *infile; int c</stdlib.h></stdio.h>…

Pythonでアスキーコード0x20から0X7Eの文字をファイルに出力する

文字から文字コードを取得する >>> ord('a') 97 >>> ord('z') 122 >>> ord('A') 65 >>> ord('Z') 90 >>> ord('0') 48 >>> ord('9') 57 >>> ord(' ') 32 >>> ord('~') 126 16進数で表示するなら >>> hex(ord('a')) '0x61' >>> hex(ord(' ')) '0x20' >>> hex(o…

基本情報技術者試験 乱数 Python randint

Pythonで0以上9以下の整数の乱数を生成する >>> import random >>> random.randint(0, 9) 3 A = random.randint(0, 9) B = random.randint(0, 9) として、AとBが等しくとなる確率を求める。 import random total = 10000 cnt = 0 for _ in range(0, total): …

Pythonで正規分布のグラフを描く

正規分布のグラフは平均値を中心にして左右対称になるそうです。 import numpy as np from scipy.stats import norm #normは正規分布 import matplotlib.pyplot as plt X = np.arange(0, 100, 0.1) #pdfは確率密度関数 #平均:60, 標準偏差:10 Y = norm.pdf(X…

C 文字列の分割(strtok) GDBで観察

"12 34 56"というスペースで区切られた文字列を "12", "34", "56" に分割するプログラム strtokを繰り返し実行することで、順番に"12", "34", "56"を取得できる。1回目のstrtokの実行で、 strは"12 34 56"から"12\034 56"に変更される(1番目のスペースが\0に…

PythonのNumpyで乱数を生成する

>>> import numpy as np 0.0から1.0までの乱数を1つ生成する >>> np.random.rand() 0.5663322709892451 >>> np.random.rand() 0.4082004363131747 >>> type(np.random.rand()) <class 'float'> 0.0から1.0までの乱数を3つ生成する >>> np.random.rand(3) array([0.22635023,</class>…

基本情報技術者試験 関数の極限値をPythonのSympyで求める

, であるとき, を求める from sympy import oo, limit, Symbol, plot t = Symbol('t') f = 1 / (t + 1) g = 1 / (t**2 - t) print(limit(g / f, t, +oo)) plot(g / f, (t, 10, 1000))

基本情報技術者試験 無向グラフをPythonのNetworkXで描く

import matplotlib.pyplot as plt import networkx as nx # 無向グラフの作成 G = nx.Graph() # 頂点の追加 G.add_nodes_from(['a', 'b', 'c', 'd', 'e', 'f']) # 辺の追加 G.add_edges_from([('a', 'b'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('c', 'e'), …

基本情報技術者試験 8ビットの値の全てのビットを反転する操作

16進数FFのビット列と排他的論理和をとる Pythonでの実行例 >>> bin(0b00001111 ^ 0xFF) '0b11110000' 16進数FF(0xFF)は2進数で表すと11111111である >>> bin(0xFF) '0b11111111' 2進数1との排他的論理和をとると、ビットを反転させることができる >>> bin(0…

基本情報技術者試験 10進数を2進数に変換するプログラム

与えられた10進数を8桁の2進数に変換するプログラム 生成する2進数は文字列C #include <stdio.h> #define DIGIT 8 void conv_dec_to_bin(int dec, char *bin) { int i; for (i = DIGIT - 1; i >= 0; i--) { bin[i] = dec % 2 + '0'; dec /= 2; } } int main() { char </stdio.h>…

gdbserverの使い方

デバッグするプログラムを「prog」とする。 ポート番号を「12345」とする。これは適当なものでよい。 $ gdbserver localhost:12345 ./progもう一つターミナルを起動して下記のコマンドを実行する。 $ gdb ./prog Reading symbols from ./prog...done. (gdb) …

Linuxカーネルのソースコードの解凍

下記のサイトからソースコードをダウンロードする。 「Latest Release」というボタンをクリックする。 The Linux Kernel Archives 下記のコマンドを実行する。 $ xz -dv linux-5.11.11.tar.xz $ tar -xvf linux-5.11.11.tar