Python3関連のことを調べてみた

Python3関連のことを調べてみた

回文判定 Python3編

https://paiza.jp/works/mondai/string_primer/normal_step11

回分かどうか判定せよという問題
ループを回して1文字ずつ取り出して等しいか調べ等しくなければNOを出すというロジック。
文字列を逆にする書き方とzip関数を新たに学ぶ。

“`py
S = str(input())
reS = S[::-1]

flag = ‘YES’
for x, y in zip(S,reS):
if x != y:
flag = ‘NO’
break
print(flag)

“`
でも実は、SとreSが同じだったらOKなのである。
たしかに。。。。

“`py
S = str(input())
reS = S[::-1]
if S == reS:
flag = ‘YES’
else:
flag = ‘NO’
“`

元記事を表示

大文字小文字の反転 Python3編

https://paiza.jp/works/mondai/string_primer/normal_step8

1文字ずつ、大文字は小文字に、小文字は大文字にして出力せよという問題
pythonにはそれができる関数があるので

“`py
print(input().swapcase())
“`

これにて終わりですが、もしその関数がなかったらどう実装するか。
ひとまずその1文字ずつ切り出して大文字か小文字かを調べて変換するというのが考えられる。

1文字ずつ切り出す方法は以前やった。
小文字かを調べるのは`islower()`
他にも`isupper()`,`istitle()`がある。

“`py
s = input()

for character in s:
if character.islower():
print(character.upper(), end=””)
else:
print(character.lower(), end=””)

print()
“`

元記事を表示

pickle の逆アセンブリの命令の解説 (pickletools 使用)

pickle で作成したファイルをデバッグしたい場合に、逆アセンブリを読むこともあると思います。

こちらの記事がとても丁寧に解説されていて、非常にわかりやすく助かりました。

https://qiita.com/tanuk1647/items/4c2a305c7cc4e12ef99d

ですが、`pickletools` のプロトコル(バージョン)が違うからなのか、こちらに掲載されていないニモニックもあり、あまり日本語でまとまっているサイトも見当たらなかったので、いくつか追加で解説していきたいと思います。今回使用したプロトコルは `PROTO 4` です。

# STACK_GLOBAL (スタックを参照する GLOBAL)

冒頭の記事で紹介されている `GLOBAL` オペコードでは 2つの引数を取ってオブジェクトを作成しますが、 `STACK_GLOBAL` はかわりにスタックからオブジェクトを2個ポップして、(プッシュされた順に)`module_name` と `class_name` とし、`”module_name.class_name”`をスタックにプッシュします。

元記事を表示

Linuxを使えるようになろう #4

# Linux上でPythonプログラムを動かそう

これまでの勉強会でプログラムを動かす際には,Jupyter NotebookやGoogle Colabolatoryなどを使用してきたが,より複雑なプログラムを動かすには,これらでは限界がある.

そこで,今回はLinux上で,Pythonプログラムを動作させる方法を学んでいこう.

# emacsを使いこなそう

これまでもemacsは使用してもらったが,改めて,コマンドのおさらい.
よく使いそうなものをいくつか.

|コマンド|操作内容|
|-|-|
|Ctrl+X Ctrl+S|ファイル変更の保存|
|Ctrl+X Ctrl+C|emacsの終了|
|Ctrl+S|文字列の検索|
|Ctrl+K|カーソル位置から後ろを切り取り|
|Ctrl+Y|切り取ったものを貼り付け|

# Pythonのプログラムを書いてみよう

test.pyというファイルを作成し下記のプログラムを書いてみある.

“`test.py
#!/usr/bin/python3
# -*- coding : utf-8 -*-

print(“Hell

元記事を表示

Pythonを用いて簡易的な計算機を作った話

# この記事の目的
プログラムを勉強する中で、ゼロからアルゴリズムを考える機会が少なかったので、アルゴリズムを考えコードを書く練習として簡易的な計算機をpythonで作っていく。

# 今回作る計算機の仕様
入力される文字列は以下のルールに従う。
* 使用できる文字は整数、括弧、演算子(+,-,*,/,%,^)、スペースである
* 文字は半角を受け付ける
* 数字と数字の間にスペースがある場合は1つの数字として扱う(例:12 34→1234)
* 単項マイナス演算子は必ず括弧で囲む(例:-2→(-2))
* 括弧を用いる際の乗算の省略は不可(例:3(4+5)→3*(4+5))
# 設計
### 計算までの流れ
処理の流れは大きく分けて
1. 文字列から配列に変換する
1. 配列を逆ポーランド記法の並びに変換する
1. 変換した配列とスタックとポップを用いて計算を行う

の三つのパートからなる。

続いて上記の処理の流れをどのように実装していくかを考えていく。
### 1.文字列から配列へ変換する
今回入力される文字は、数字・演算子・括弧のみなので、以下のようなルールで配列に要素を格納し

元記事を表示

じゃんけん.py

# 乱数でじゃんけんに勝つ

#### 相手の傾向から次の勝利を予想する。

“`python:main.py
import random
gu = 0
choki = 0
pa = 0
num = 0
gu_p = 1
choki_p = 1
pa_p = 1
up_p = 0.1
dict = [‘gu’,’cho’,’pa’]
while True :
if num != 0:
res = input(“勝or負(w / l) : “)
if res == ‘w’ or res == ‘l’:
pass
else:
res = random.choice([‘w’,’l’])
if gu == 1:
gu = 0
if res == ‘w’:
gu_p += up_p
else:
if gu_p > up_p * 1.1:

元記事を表示

日本語データセットで10+ヶ国語を発話するTTS開発

韓国で開発をしている大学生です。初めて記事お作成してみます。

# 目次

0. 概要
0. 亜流雀々
0. 本プロジェクトの開発過程
0. 結果

# 概要

Japanese to Multi Language TTS – VITS (MB-iSTFT-VITS)

まず、このプロジェクトは日本語データセットで韓国語を発話できるようにするために始めたプロジェクトです。

その後、HANGULIZEプロジェクトを発見し、ミュートクリーナーにハングルのサイズを追加して10+ヶ国語を発火させることができるようになりました。 外国語を流暢に話す日本人だと感じたら、このプロジェクトは成功だと言えます。

# 亜流雀々

以下は、このプロジェクトに到達するために制作した亜流作です。

– RVC-VITS (https://github.com/kdrkdrkdr/RVC-VITS)
特徴:RVCでデータaugmentation後に学習する
>変換されたデータセットのイントネーションとキャラクターだけの特徴が生かされないイシューが発生

– JK-VITS

元記事を表示

【React】React+Pythonでマイクロサービスの依存関係を可視化してみた

# やりたいこと
私の会社ではマイクロサービスアーキテクチャを採用している。
そこでサービス同士の複雑な依存関係を可視化してみたい。
※企業秘密の観点からサービス名はハッシュ値に置換してある。
![service.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/76e93a67-d134-0170-96cf-721ce1eb0715.gif)

# 要件
– 閲覧したいサービスの依存関係を矢印の向きとノードの色、線の種類(点線は切れても致命的ではない関係性)で表現したい。
– サービスを検索できるようにしたい。
– ノードがクリックされたらそのノードのサービスにまつわる依存関係を表示させたい。

# システム
![スクリーンショット 2023-11-26 21.34.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/5bb96a14-8f7a-6f39-8ac1-a849bb040c1c.p

元記事を表示

文字の検索 Python3編

https://paiza.jp/works/mondai/string_primer/basic_step6
>文字列 S と文字 c が与えられるので、 c は S の何文字目に現れるかを調べてください。

何もみないで書いたやつ
“`py
S = input()
c = input()
order = 1
for i in S:
if i == c:
print(order)
break
else:
order += 1
“`

答えは`enumerate()`という関数を用いていました
これを用いると、配列の要素だけでなくインデックスも同時に取得可能
下記の様に書きます i, eleは変数名で変更可能。

“`PY
s = input()
c = input()

for i, ele in enumerate(s):
if ele == c:
print(i + 1)

“`

元記事を表示

全加算器 Python3編

https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step9

繰り上がりのある問題。
まあ、ヒントがあったのでその通りに答えたら正解だった。

“`py
a, b,C_1= map(int, input().split())

s_y = a ^ b
c_x = a & b

s = s_y ^ C_1
c_y = s_y & C_1

c_2 = c_x | c_y

print(c_2, s)
“`

さて。
なんでこう考えたら正解になるのか。

“`
(C_1:繰り上がり)
A_2 A_1
+ B_2 B_1
============
C_2 S_2 S_1
“`

ちなみに半加算器はこれ

“`
(C_1:繰り上がり)
A_1
+   B_1
============
C_1 S_1
“`
まず普通の計算と同じように考えると混乱する。

今やっているのは、1桁の計算ではなく、その次の桁の計算。

元記事を表示

半加算器 Python3編

https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step8

A + Bを2進数で計算した結果を出力するという問題。
2進法は0と1で表されるので今回のような論理演算にはよく使われる、と習った。

で、今それをやっている。
ちなみに、私は数学嫌いだった。(いわゆる文系プログラマ)
まあ、やらないわけにはいかないので。

とにかく。場合分けだな。

“`
A
B
=======
C S
“`
Cについて考えると
A=0 と B= 0 なら、0で繰り上がらないので0
A=1 と B= 0 なら、1で繰り上がらないので0
A=0 と B= 1 なら、1で繰り上がらないので0
A=1 と B= 1 なら、1で繰り上がるので1
この結果は ANDのときと同じなので、
C = A and B という関係になっていることがわかる。

Sについて考えると
A=0 と B= 0 なら、0
A=1 と B= 0 なら、1
A=0 と B= 1 なら、1
A=1

元記事を表示

functools使い方 cmp_to_key (abc 308C)

atcoder abc308 Cでcmp_to_keyを使った解法があったため、使い方をまとめる。
“from functools import cmp_to_key“ を使用することで、Python のソート
関数(sorted やsortなど)でカスタム比較関数を使うことができる。

“cmp_to_key“:2つの要素を比較する比較関数(cmp 関数)を受け取り、それを key 関数に変換することができる。比較関数は、2つの引数を取り、それらを比較して “-1“,“0“,“1“ を返す必要がある。

“`py:基本的な使い方
from functools import cmp_to_key

# 比較関数
def compare_items(a, b):
if a > b:
return 1
elif a < b: return -1 else: return 0 # ソートしたいリスト my_list = [3, 1, 4, 1, 5, 9, 2, 6] # カスタム比較関数を使っ

元記事を表示

print()でデバッグする必要がなくなるicecream

# 概要

pythonで何かを開発したり、データ分析をしているときのデバッグってみなさんどうされているでしょうか?多くの人がprint()関数を駆使しているのではないかと思います。print()関数自体は単純ですが、データの型や表示の形を都度変えながらデバッグするのは面倒臭いことが多いと思います。

今回はそういったデバッグの面倒臭さを軽減してくれるライブラリ“`icecream“`を紹介します。

– icecreamのGithubページ:https://github.com/gruns/icecream
– 今回作成したコードの格納先(Github):https://github.com/KENTAROSZK/icecream_test/tree/main

# icecreamのインストール
単純です。↓のコマンドでインストールできます。
“`shell
pip install icecream
“`

# 使い方
早速使い方を見ていきましょう。

## 基本機能
### 引数あり

#### 変数 | List
“`python
# icrecreamのインポート

元記事を表示

NAND 演算の基本 (paizaランク D 相当)

https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step5

今やっているのは論理演算メニューシリーズ。
とりあえず書き方は下のコード通り覚えておけばOKだけど
論理については理解しておいたほうがいいです。
論理と覚えるところは区別しましょう

pythonだと、論理積、論理和、否定、排他的論理和があり、それらをつかって
他の論理も表現します。

“`py
A, B = map(int, input().split())
#論理積
print(A and B)
#論理和
print(A or B)
#否定(単項演算)
print(int(not A))
# EOR,XOR演算(排他的論理和)
print(a ^ b)
# NOR演算(否定的論理和)
print(int(not(A or B)))
# NAND演算(否定的論理積)
print(int(not(A and B)))
# XNOR演算(排他的否定的論理和)
print(int(not(A ^ B)))
“`
ド・モルガンの法

元記事を表示

集合の結合 Python3編

https://paiza.jp/works/mondai/data_structure/data_structure__set_boss

2つの集合を1つにしてソートして出力する問題
和集合は下記のように `A | B` または `A.union(B)`

“`py
N = int(input())
A = {int(x) for x in input().split()}
B = {int(x) for x in input().split()}
print(*sorted(A | B))
“`

他のやり方

“`py
N = int(input())
A = [int(x) for x in input().split()]
B = [int(x) for x in input().split()]

c = set(A + B)

print(” “.join(map(str, sorted(c))))
“`

下の方が直感的にわかりやすいか?

元記事を表示

重複の判定 1 (paizaランク C 相当)

https://paiza.jp/works/mondai/data_structure/data_structure__set_step3

>N 個の要素からなる数列 A が与えられます。2 ≦ i ≦ N の各 i に対して、A_i と同じ値が A_1 から A_{i-1} の間にあるかどうかを判定してください。

考え方としては、まずAのリストをつくり、そこからBのリストに、まず1個入れ、そこからループするたびにBのリストにA1つずつ入れていき、
ループするたびにあるかどうか確かめ出力し、また1個入れ。。。というのを繰り返す

“`py
N = int(input())
A = [int(x) for x in input().split()]
B = []
for i in range(N):
if i == 0:
B.append(A[i])
else:
if A[i] in B:
print(‘Yes’)
else:
print(‘No’)

元記事を表示

重複の削除 Python3編

https://paiza.jp/works/mondai/data_structure/data_structure__set_step2
>N 個の要素からなる数列 A が与えられます。数列 A は昇順にソートされています。A の重複した要素を取り除いて昇順に出力してください。

辞書の作り方を前回学んだので
さっそくここでも。

“`py
N = int(input())
A = {int(x) for x in input().split()}
print(*sorted(A))

“`

この場合他の作り方もあったので復習で一応やっとく

“`py
print(” “.join(map(str, A)))
“`

元記事を表示

集合の探索 Python3編

https://paiza.jp/works/mondai/data_structure/data_structure__set_step1

集合をつくってそこから検索せよという問題。

集合を作るのは初めてだけど辞書と同じはず?

とりあえず作ってみた

作った集合をprintしてみたら文字列型だったので事前に検索するのを
文字列型にしたらOKだった

“`py
N, B = map(int, input().split())
B = str(B)
A = set(input().split())

if B in A:
print(‘Yes’)
else:
print(‘No’)
“`
{}があるので辞書みたいだが、違うのは、キーがないこと。
他にも Aをつくるときにintにしていれる方法もあった

“`py
A = {int(x) for x in input().split()}
“`

元記事を表示

商品の検索 (paizaランク C 相当)

https://paiza.jp/works/mondai/data_structure/data_structure__dict_boss

>N 個の文字列 S_1, … , S_N と、Q 個の文字列 T_1, … , T_Q が与えられます。各 T_i について、以下の処理を行ってください。
・ S_j == T_i を満たす最小の j を出力する。ただし、そのような j が存在しない場合は -1 を出力する。

という問題。

下以外はとくに難しいところはなく、すぐ解けた。
ポイントは
該当する要素のインデックスを調べるというところ。
見つかったかどうかのフラグ変数を実装したところ。
そしてループで該当するものが見つかったら
その場でbreakしないといけないところ。

“`py
N,Q = map(int,input().split())
S = [input() for _ in range(N)]

for _ in range(Q):
target = input()
flag = 0
for i in S:
if

元記事を表示

一定時間 HLS ストリーミングが再生されなかったら配信止めたくない? with Lua + Python3

# はじめに
## 何の記事なの?
nginx-rtmp-module を使ってストリーミング配信しているとどうしても『観たり聴いたりしてない間は止めてもいいかなー』という「オフタイマー」な機能が欲しかったのでふとした思いつきで実装してみることにしました。
Python はそこそこ、 Lua はほぼ初めてな人ですが完全に「なんとなく」で実装しています。

一応誕生日ネタではあります~~が、後日「[個人開発 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/personal-developement)」に枠が残っていたらこの記事を書くことになったきっかけになった話やそのコードを出そうと思います(予定)~~。

## Q: こんなん誰が得すんのさ?
A: (少なくとも)自分は得しましたw

## 前提設定内容
:::note warn
今回関係ある見せられる部分だけ抜き出して内容を差し替えています。
また、ファイル名やパラメーターは後日「個人開発 Advent Calendar(ry」に載せる(かもしれない)ものとは違

元記事を表示

OTHERカテゴリの最新記事