😸

【初心者向け/ITスクール 65日】Pythonの基礎一覧3

に公開

はじめに

今日は、ITスクールに通った65日目の日で、今日学んだ知識を記事にシェアしたいと思います。本記事が、ITを勉強を始めた方々にもロードマップになればいいと思います。

今日は、昨日の続きで、PythonのOOPを勉強し、JAVAとの違いも勉強しました。
最後にxml parsingも実習してみましたが、簡単で楽でした。

Pythonのimport方法

import package.module

import animal.pet  

d = animal.pet.Dog("dog1",7) 
d.printInfo()      

import package.module as nickname

import animal.pet as ap 
d = ap.Dog("dog2,8")
d.printInfo()

from package.module import class(or function)(一番楽)

from animal.pet import Dog 
d = Dog("dog3", 3)
d.printInfo()

from package.module import class(or function) as nickname

from animal.pet import Dog as dd
d =dd("dog4",1)
d.printInfo()

if name == "main": このmodule(.py)でのみ実行されるコードを意味します。

Pythonの多重継承

Javaは一つのクラスしか継承できないが、Pythonはクラスも多重継承が可能です。

class Avengers:
    def __init__(self,realName):
        self.realName = realName
    def attack(self):
        print("attack")
    def printInfo(self):
        print(self.realName)    
########################################### 
class Human:
    def __init__(self,age):
        self.age = age
    def eat(self):
        print("yummy")
    def attack(self):
        print("human attack")
    def printInfo(self):
        print(self.age)

attackのように継承することが被ののる場合、先に継承したAvengersのattackを継承します。humanのattackを継承したい場合、マニュアルで作成する必要があります。

class Ironman(Avengers,Human):
    def __init__(self,realName,age):
        Avengers.__init__(self,realName)
        Human.__init__(self, age)
    def attack(self):
        Human.attack(self)        
    def printInfo(self):
        Avengers.printInfo(self)
        Human.printInfo(self)
############################################### 
if __name__ =="__main__":
    i = Ironman("Tony Stark", 40)
    i.attack()
    i.eat()
    i.printInfo()      
human attack   // attackをOverridingしない場合avengerのattackを継承
yummy
Tony Stark
40

datetime

# 現在の時間
now = datetime.today()  #(_datetime X)
print(now)

# 特定な時間
yesterday = datetime(2003,10,18)
print(yesterday)
print(type(yesterday))
print(yesterday.year)
print(yesterday.month)
print(yesterday.day)

str -> datetime

randomDate = input("yyyymmdd:")
randomDate = datetime.strptime(randomDate, "%Y%m%d")

datetime -> str

date = datetime.strftime(randomDate,"%d/%m")
print(date)
yyyymmdd:19930216
16/02

Pattern

datetime関連のformatです。

  • %Y: 年(4桁)
  • %y: 年(下2桁)
  • %m: 月
  • %d: 日
  • %H: 時間(24時間制)
  • %I: 時間(12時間制)
  • %p: AMまたはPM
  • %M: 分
  • %S: 秒
  • %a: 曜日(短い形式、例: 'Sun')
  • %A: 曜日(長い形式、例: 'Sunday')

ExceptionHandling

try:
    x = int(input("x : "))  
    y = int(input("y : "))
    z = x//y
    print(z)
    
    l = [1,23,456]
    print(l[y])
except Exception as asdf: # 一括で処理可能
    print(asdf)           # e.princtraceみたいなエラーの内容出力
    
# except ZeroDivisionError:
    # print("can not divide by zero")
# except IndexError:
    # print("there is no index in this list")
else:
    print("success")          
finally:
    print("returnより先に呼び出される") 

fstring

{}

formatをより簡単にできるように支援するPython 3.6から支援するformatting

beer = input("beername : ")
bottlescount = int(input("bottlescount : "))
print("I love to drink %s,and I drink it %d bottles everyday" %(beer,bottlescount))
print("----------------------")

この場合、str,intを別に指定する必要がありますが、f{}で簡単にすることができます。

beer = input("beername : ")
bottlescount = int(input("bottlescount : "))
print(f"I love to drink {beer},and I drink it {bottlescount} bottles everyday" )

実数

f = 1.125
# f = 1.135
print(f"{f}")       #1.125 / 1.135
print(f"{f:.1f}")   #1.1  /  1.1
print(f"{f:.2f}")   #1.12 /  1.14

再保のprint(f"{f:.2f}")の結果は1.13ではなく、1.12になります。

文字整列

s1 = "left"
result = f"│{s1:<10}│"
print(result)

s2 = "mid"
result = f"│{s2:^10}│"
print(result)

s3 = "right"
result = f"│{s3:>10}│"
print(result)
│left      │     #left空空空空空空 javaは-
│   mid    │     #空空空mid空空空  
│     right│     #空空空空空right  javaはdefault or 0 

dick , list

d = {
    "name": "beaver",
    "age": 100,
    "gender": "male"
}

result = f"name: {d['name']}, gender:{d['gender']},age:{d['age']}"
print(result)
name: beaver, gender:male,age:100
n = [100,200,300]

print(f"list : {n[0]}, {n[1]},{n[2]}")

for v in n:
    print(f"element : {v}")
list : 100, 200,300
element : 100
element : 200
element : 300

コンマ、曜日

num2 = 1234567890
print(num2)

#1,234,567,890
print(f"{num2:,}")
print("-------------")    

date1 = datetime.today()
print(date1)
print(f"{date1:%Y-%m-%d} is on a {date1:%A}.")
#1234567890
1,234,567,890
-------------
#2023-10-19 17:27:52.560282
2023-10-19 is on a Thursday.

File

ファイルからデータを読み込み、プログラムで利用するために使用します。同様に、プログラムで生成したデータをファイル形式で保存することも可能です。

ファイルを開く => 操作(読み込み、書き込み) => ファイルを閉じる(必須!!!)

#1. 파일에 내용 쓰기 (write)
#폴더는 미리 만들어놔야 함 / 파일은 존재하지 않아도 실행시에 파일을 만들어 줌

w : overwrite

file = open("C:/Users/gram/Desktop/t/text.txt","w", encoding="UTF-8")
file.write("test ")
print("finish")
file.close()

a : append

file = open("C:/Users/gram/Desktop/t/text.txt","a", encoding="UTF-8")
file.write("\nappend test")
print("finish")
file.close()

r: read

全体

file = open("C:/Users/gram/Desktop/t/text.txt","r", encoding="UTF-8")

data = file.read()
print(data)
file.close()
test
append test

1 lineずつ

while True: 
    data = file.readline()
    print(data,end="")    
    if data == "":
        break 
file.close()    

XML Parsing

# -*- coding:utf-8 -*-
from urllib.parse import quote
from http.client import HTTPSConnection
from xml.etree.ElementTree import fromstring
import re

# Naver Open APIのURLとクライアントIDおよびクライアントシークレットキー
# 商品名を入力します。
# XMLデータを解析し、文書のタイトル、最低価格、ブランド、大分類カテゴリ情報を出力します。

q = input("商品名:")
# URLエンコーディングしてサーバーに送信
q = quote(q)

# HTTPリクエストを送信する際、.request()関数を使用してリクエストヘッダーを処理
headers = {
    "X-Naver-Client-Id": "xxxxxxxx",
    "X-Naver-Client-Secret": "xxxxxxxx"
}

# HTTPS接続の設定
hc = HTTPSConnection("openapi.naver.com")
hc.request("GET", "/v1/search/shop.xml?query=" + q, headers=headers)

# レスポンスを取得

res = hc.getresponse()
resBody = res.read()

# HTML解析関数
def cleanhtml(raw_html):
    cleanr = re.compile('<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});')
    cleantext = re.sub(cleanr, "", raw_html)
    return cleantext

# 解析 (inの隣にイテレーターが必要)
for i in fromstring(resBody).iter("item"):
    print(cleanhtml(i.find("title").text))
    print(i.find("lprice").text)
    print(i.find("brand").text)
    print(i.find("category1").text)
    print("--------")

Discussion