練習サイトにはPaizaを使ってます。
-
標準入力
N, M, K = map(int, input().split()) line = input().rstrip() line.split(",") //カンマ切を切り出す -
入力の切り分け
input_line = input() line = input_line.split() n1 = int(line[0]) n2 = int(line[1]) n3 = int(line[2]) kabusuu = 0 money = 0 for i in range(1,n1): input_line = input() kabuka = int(input_line) if kabuka <= n2 : kabusuu +=1 money -= kabuka elif kabuka >= n3: if kabusuu > 0: money += kabuka * kabusuu kabusuu = 0 input_line = input() kabuka = int(input_line) money = money+kabusuu*kabuka print(money)
-
小数で受ける
input_line = input() taion = float(input_line) if taion < 37: print("OK") else: print("NG")
配列
-
宣言
num =[0] * 5 for i in range(0,5): input_line = input() num[i-1] = int(input_line) print(max(num)) print(min(num))
-
配列操作
l.append(100) list = [1, 2, 3, 4, 5] list.insert(3, 10) 結果[1, 2, 3, 10, 4, 5] list6 = [1, 2, 3, 4, 5] list.pop(2) 結果[1, 2, 3, 4, 5]
-
配列のソート
input_line = input() line = input_line.split() line.sort() //配列.sort() print(line[1])
-
sorted
x = [random.randint(0, 100) for _ in range(10)] print(x) print(sorted(x)) print(sorted(x, reverse=True)) list.sort(x) print(x) list.sort(x, reverse=True) print(x) //sortedメソッドは元のリストを変更しないが、list.sortメソッドは元のリストを変更する。
-
複数キーによる二次元配列のソート(中途半端:要検討)
s = [('john', 'A', 15),('jane', 'B', 12), ('dave', 'B', 10),('ted', 'A', 13), ('zzz', 'B', 15)] s = sorted(s, key=lambda x: x[1]) print(s) v = sorted(s, key=lambda x : x[2], reverse=True) # sort on secondary keyprint(v)
-
二次元配列のソート
li = sorted(li, reverse=True, key=lambda x: x[1])
-
区切り文字を指定した切り分け例
input_line = input() line = input_line.split(":") ji = int(line[0]) fun = int(line[1]) if ji < 8: ji +=24 ji -= 8 print(str(ji)+":"+str(fun)) -
追加
numbers = [3, 1, 4, 1, 5] results = [] for item in numbers: results.append(item * 10) -
削除
del array[0][1] array.pop(-1) で最後の要素を削除
array.pop(2) で2番めの要素を削除 -
二次元配列をforで作る[[列]行] この例では4行3列 すべてのデータに0
numbers = [[0 for i in range(3)] for j in range(4)] numbers[0][1] = 2
-
numpy を使って二次元配列を宣言
import numpy as np: 使うときに便利なように別名としてpyとしている。必要ではない。 list = np.zeros((3, 3))
-
二次元配列のソート reverse で昇順、降順を設定できる(デフォルトは昇順)
arr = [ [3, "b"], [1, "c"], [2, "a"]] arr.sort(reverse=True, key=lambda x:x[1])
-
二次元配列に要素を追加(二次元が崩れないように)
numbers.append(["10","9"])
-
配列
players = "勇者,戦士,魔法使い,忍者" list = players.split(",") list.remove("忍者") //忍者を取り除く list.append("霧島") //追加 print(list) -
二次元配列の複数キーによるソート
csuu = int(input()) medals = [[0 for i in range(3)] for j in range(csuu)] for i in range(csuu): G, S, B = map(int, input().split()) medals[i][0]=G medals[i][1]=S medals[i][2]=B medals.sort(reverse=True, key=lambda x: (x[0],x[1],x[2])) for i in range(csuu): print(medals[i][0],medals[i][1],medals[i][2]) -
map
list1 = [“1″,”2″,”3″,”4″,”5”] print(list(map(int, list1)))
辞書
-
辞書データの作成、取り出し
enemyDictionary = {"ザコ":"スライム", "中ボス":"ドラゴン", "ラスボス":"魔王"} // { キー:データ,} print(enemyDictionary) print(enemyDictionary["中ボス"]) // ドラゴンが表示される level = "ラスボス" print(enemyDictionary[level]) // 魔王が表示される -
辞書データの追加・削除
enemies = {"ザコ":"スライム", "中ボス":"ドラゴン", "ラスボス":"魔王"} print(enemies) print(enemies["中ボス"]) print(len(enemies)) enemies["ザコ2"] = "メタルモンスター" //ザコ2というキーを持つデータメタルモンスターを追加 print(enemies) print(len(enemies)) enemies["中ボス"] = "スターキメラ" //中ボスというキーを持つデータのデータをスターキメラに変更 print(enemies) print(len(enemies)) del enemies["ザコ"] //ザコレコードを削除(キーもデータもなくなる) print(enemies) print(len(enemies))
-
辞書
n = int(input()) f = {} for i in range(n): s = input().split() f[s[0]] = int(s[1]) key = input() print(f[key])
-
forで操作
enemies = {"ザコ":"スライム", "中ボス":"ドラゴン", "ラスボス":"魔王"} print(enemies) print(enemies["中ボス"]) for rank in enemies: print(enemies[rank] + "が、あらわれた!") //enemies だけだとデータが取り出される print(rank) //キーだけが取り出される for (rank, enemy) in enemies.items(): //キーとデータのセットで取り出したいとき:この場合キーはrankにデータはenemyに入る print(rank + "の" + enemy + "が、あらわれた!") -
辞書を配列のように使う例
n=int(input()) enemy = {} for i in range(n): enemy[input()]=0 n=int(input()) for i in range(n): atack = input().split() pt = int(atack[1])+enemy[atack[0]] enemy[atack[0]]=pt aim = input() print(enemy[aim]) -
辞書型のデータを引数に出来る。
def introduce(**people): for name, greeting in people.items(): print("私は" + name + "です。" + greeting) introduce(hero = "はじめまして", villager = "こんにちは", soldier = "よろしくお願いします")
-
辞書のソート
A, B, C = map(int, input().split()) dicA ={} dicB ={} for i in range(A): x,y = map(int, input().split()) dicA[x]=y #ソートすると辞書ではなくなるので一手間かかる list = sorted(dicA.items(), key=lambda x: x[0]) dicA.clear() dicA.update(list) for i in range(B): x,y = map(int, input().split()) dicB[x]=y #i にはキーが入っている。値を取り出すために dicA[i] としている。dicAの値をキーにdicBの値を取り出している。 for i in dicA: print(i,dicB[dicA[i]])#リストのまま使うのであれば普通の2次元配列として操作できる。
-
辞書に格納されているかどうかを確認する。辞書の値を操作したい時に、チェックする時に使う。
d= {'key1': 'val1', 'key2': 'val2', 'key3': 'val3', 'key4': 'val4'} print(d.get('key5')) # None : 何も指定しなければNoneが返される print(d.get('key5', 'NO KEY')) # NO KEY print(d.get('key5', 100)) # 100
ループ
-
標準入力とループ処理
count = int(input()) print("データ個数 " + str(count)) for i in range(count): line = input().rstrip() print("hello " + line) -
行末の改行コードを取り除く
line = input().rstrip() -
while loop
n=0 while True: n +=1 if n == 10: print(10) break print(n) -
loop2
f = True n=0 while f: n +=1 if n == 10: f = False print(n) -
loop,string テキストから一文字ずつとりだす
for i in "hypo": print(i)
-
loop: 2で何回割れるか
N = 10 i=0 while N > 1: i += 1 N = N//2 print(i)
添字無しで要素取り出し
-
拡張 for 文
numbers = [12, 34, 56, 78, 90] total = 0 for num in numbers: total = total + num print(total)
文字列操作
-
テキスト末尾を削除
print(ans.rstrip())
-
文字列逆転
input_line = input() print(input_line.upper()) input_line = input() ans = "" for i in range(len(input_line)-1,-1,-1): ans = ans + str(input_line[i]) print(ans) -
文字列
input_line = input() line = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for i in range(0,26): if line[i] == input_line: print(i+1) -
文字列連結
input_line = input() inNum = int(input_line) ans ="" for i in range(1,10): if i < 9 : ans = ans + str(i * inNum)+" " else: ans = ans + str(i * inNum) print(ans) -
文字列判定;同じ文字ばかりかどうかを二重ループで判定
input_line = input() ans = "NG" for i in range(0,len(input_line)): for j in range(0,len(input_line)): if input_line[i] != input_line[j]: ans = "OK" print(ans) -
文字列の有無
ngword = input() text = input() if ngword in text: print("NG") else: print(text) -
文字数を数える# "A"という文字が何個あるか調べる
s = 'aAaAAbAccdd' s.count('A') -
replace : '' を置き換え対象とすることで任意の文字列を削除できる
s = input() print(s.replace('False', 'True')) print(s.replace('kesu','')) // kesu という文字列を元の文字列から削除する -
文字列に改行を入れる
input_line = input() ans = "" for i in range(0,len(input_line)): if i == 9: ans = ans+input_line[i]+'\n' else: ans = ans+input_line[i] print(ans) -
文字列から数字を取り出す。取り出されたデータをintすることを忘れずに! import re が要る
import re input_line = int(input()) s = "" usrs = [""]* input_line unum = [0] * input_line for i in range(input_line): s = input() usrs[i] = s unum[i] = int(re.sub(r"\D", "", s)) 文字列sから数値のみを取り出 re.sub kariU = "" kariN = 0 for i in range (0,len(usrs)): 並べ替え for j in range(0,len(usrs)): if unum[i] < unum[j]: kariU = usrs[i] kariN = unum[i] usrs[i] = usrs[j] unum[i] = unum[j] usrs[j] = kariU unum[j] = kariN for i in usrs: print(i) -
re import re
re.sub()は、文字列を置換するための関数です。 「r”\D”」で数字以外を指定し、置換後の文字列を「””」とすることで、文字列から数字だけを取り出すことができます。 \D が数字を表し r で逆にすることができる 普通にreplaceのように使うことも可能 import re s = "2020年" result = re.sub("年", "hoge", s) print(result)
-
文字列の一番長いものを求める
txt = [0] *3 for i in range(0,3): txt[i] = len(input()) print(max(txt))
-
文字列関数
txt.islower() // txt がすべて小文字の場合True text.capitalize() //先頭の文字を大文字にし他は小文字 text.upper() //すべて大文字
-
【 集合を用いる 】
まず、数列 A と、数列 B の間には要素の重複が生じえるということに注意が必要です。また、数列 A 内、数列 B 内においても重複が生じえることにも注意してください。
この重複を取り除くために、集合を使います。集合を定義する際、set 関数を使います。
数列 A と、数列 B を連結し、引数として渡すことで、1 行で簡潔に書けます。 リストの連結は + 演算子を使います。
集合は定義の際、重複を除去してくれるので、重複除去の処理を自分で実装する必要はありません。N = int(input()) A = input().split() B = input().split() for i in range(len(A)): A[i] = int(A[i]) B[i] = int(B[i]) # 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)))) -
後ろから指定文字数を削除。Python では負のインデキシングを使用することができます。最後の文字はインデックス-1 から始まり、-2、-3、-4 の順で最初の文字に到達します。
my_str="python string" final_str = my_str[:-3] print(final_str) 出力: python str
Tech lib
-
2進数への変換
n = 4 ans = "" ans2 = "" while n > 0: ans = ans + str(n%2) n=n//2 for i in range(len(ans)-1,-1,-1): ans2=ans2+ans[i] print(ans2)
-
複数行を一回で読み込む
import sys array = [] for line in sys.stdin.readlines(): array.append(line.rstrip()) print(array)
-
べき乗
input_line = input() nsuu = int(input_line) result = "NG" for i in range(1 , 9): if nsuu == (2**i): result = "OK" break print(result)
-
再帰関数 階乗を求める
def kaijyo(n): if n ==0 or n == 1: return 1 else: return n * kaijyo(n-1) print(kaijyo(9)) # 362880
-
random
import random line = input().rstrip().split(",") //入力例: スライム,スライムベス,ホイミスライム,スラリン,ポイズンスライム,メタルスライム,スライムキング for enemy in line: print(enemy + "が現れた!") num =len(line) attack = random.randrange(num) print(line[attack]+"に会心の一撃!"+ line[attack] +"を倒した")
-
要素番号とデータを同時引き出す
l = ['Alice', 'Bob', 'Charlie'] for i, name in enumerate(l): print(i, name) # 0 Alice # 1 Bob # 2 Charlie
-
練習課題
words = [] #話しかけられた単語を格納するリスト while True: word = input("何か話かけてください\n") if word == "さようなら": print("さようなら") break flg = False for w in words: if word == w: print("それ、知ってる!") flg = True break if not flg: words.append(word) print(word) -
if のみ書き直し 配列に要素が入っているかがわかる 探す文字列 in 配列
if word in words: print("それ、知ってる!") else: words.append(word) print(word) -
while
input_line = input() line = input_line.split() price = int(line[0]) rate = int(line[1]) shiharai= 0 nebiki = 0 while price >0: shiharai = shiharai + price price = int(price - price*rate/100) print(shiharai) -
切り捨て、切り上げ import math
math.floor(price - price*rate/100) //切り捨て
math.ceil(price - price*rate/100) //切り上げ
-
重複を削除する
nums = [1, 2, 1, 2, 3, 2, 4, 5,] nums_unique = list(set(nums)) print(nums_unique)
-
二次元の表を辞書にしてソートする
n = int(input()) dic ={} for i in range(n): x,y = input().split() x = int(x) dic[x] = y list = sorted(dic.items(), key=lambda x: x[0]) for i in range(n): print(list[i][0],list[i][1])
-
配列から重複を取り除く
numbers = [] for i in range(n): numbers.append(int(line[i])) ans = list(set(numbers)) //numbers に入った数字の重複をsetで取り除きlistとしてansに入れる
-
複数行をマージして重複を除いた上でソート
N = int(input()) A = input().split() B = input().split() for i in range(len(A)): A[i] = int(A[i]) B[i] = int(B[i]) c = set(A + B) print(" ".join(map(str, sorted(c)))) #3 #1 2 3 #3 4 5#1 2 3 4 5
関数
-
引数のデフォルト値 引数が設定されていない場合に使用される。
def introduce(greeting, name = "村人"): print("私は" + name + "です。" + greeting) introduce("こんにちは", "勇者") introduce("こんにちは") -
可変長引数 複数の引数を受け取れる。それをどうするかは関数内の設定。この場合はループしてすべて出力
def introduce(greeting, *names): for name in names: print("私は" + name + "です。" + greeting) introduce("こんにちは", "勇者", "村人", "兵士")
-
日付関数
from datetime import datetime, timedelta, timezone jst = timezone(timedelta(hours=9)) today = datetime.now(jst) print(today) print(today.year) print(today.month) print(today.day)
例外処理
-
try except
import sys try: key = int(input("探す値を入力してください\n")) except: print("input is not numeric") sys.exit()