アットウィキロゴ
note4recurrent @ ウィキ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

note4recurrent @ ウィキ

python-train

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

練習サイトには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 key 
    
    print(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()
    

タグ:

+ タグ編集
  • タグ:
最近更新されたスレッド
ウィキ募集バナー