明日学習キャンプAI-翌日TIL,2022.04.19


スパルタコードクラブ


明日学習キャンプAI Web開発トレーニングコース第2話


20220419 - TIL


1.やはり気まずい関係


09:00-12:30午前中勉強
2日間キャンプをする.今のところ、選手たちとの雰囲気はまだ気まずい.あとしばらくすればよくなります.
今日はマネージャーや指導者たちの知らせなしに自主学習を始めました.何の導きもない状況で、自分が少し気まずい思いをし始めたと思っています.昨日はメンバーとおしゃべりをする時間も長く、仕事のたびにノートパソコンを持ってラウンジに行くのは不便でした.だから今日は勉強カフェではなく家で勉強します.しかし、悪い面もある.朝から部屋で勉强しようと思って、眠れなかった.「本当に疲れた…」「アステディカフェに行くと知っていたのに…」本当にたくさん考えた明日はどうする...
つまり学習内容はキャンプで提供されるPythonの基礎文法です!Pythonは何度も使っているので、簡単に聞けばいいのですが…思いついた.しかし、逆に私の知らない内容がたくさんあります.
そして、ネットプログラミングの基礎授業を2、3週間聞いて、時間が経つのがとても速いです.前に聞いた授業と差は少ないですが、途中でlocalではなくmongodyを使うので、その部分はもっと丁寧に聞いています.

2.家でもっと疲れることについて


12:30-13:30ランチタイム
13:30-14:00グループミーティング
2時からゲスタに集まると聞いていたので、30分前に昼食をとりました.実は30分早く休まないと本当に我慢できませんどうして家で勉強するのがもっと疲れているのか分からない.とにかくご飯を食べて元気を出したら、昼食の時間が過ぎたことに気づいた.2時までに、チームメイトたちと明日のミニプロジェクトについて話しました.幸いなことに、プロジェクト公告のメニューがいいので、大きな計画を立てる必要はありません.

3.グループ自己紹介時間


14:00~15:00グループ自己紹介
ゲスタ(講堂)に集まり、各グループに自己紹介の時間がある.私を驚かせたのは、隊長が代表として隊員たちを紹介すべきだったが、私たちのチームは2番目だったので、何も知らずにでたらめを言ったようだ.幸いにも隊員たちの反応は悪くなく、私たちのチームのほかにもいろいろな人が集まっています.楽しいチーム、個性的なチーム、本当に静かなチームなど本当にいろいろあります.これからチームが交代すれば、彼らの中の誰に会えるか知りたいです.

4.スモールプロジェクトの準備


15:00-19:00午後の勉強時間
講堂でパーティーが終わった後、私たちは以前話したミニプロジェクトについて簡単に話しました.音楽という共通の関心事でチームを組んで、自分の好きな曲のYouTube動画を紹介ページに載せることにした.
簡単な会議の後、プロジェクト用のGitアカウントが作成されました.一部のチームメンバーはgitを初めて使用し、アカウントの作成と使用方法を説明し、想像以上に時間を費やした.私もGitをたくさん使ったことがありませんが、できるだけ既知の範囲で教えてあげます.
次に、基本スケルトンと一時ページを作成し、repositoryにアップロードし、チームメンバーにプッシュがうまくいっているかどうかを確認します.私はsoucetreeを使っているのでそれを紹介しましたが、あるチームメンバーがgithup desktopを使うと言っていたので、私も一度使ったことがありますが、いい感じです.

5.TIL提出を忘れないで!


19:00-20:00ディナータイム
20:00-21:00毎日レビューとTIL作成
実は昨日の初日だったのでTILを書いたのですが提出しなかったので今日マネージャーさんが探していた不祥事がありましたWILとTILだけを提出するとは知りませんでしたが、これは間違いです.不思議なことに、私は知りません.私たちの隊員はみな自分で渡したのです.組長のような私は本当に私たちのチームです...心配ですね.
とにかく、真ん中のサーバーももっと爆発して、思ったより時間が近くなりました.勉強している間は時間が経つのが遅いですが、なぜ今のようにTILを書くのがこんなに早いのか分かりません.でも今日も一日お疲れ様でした、という一日一日が積み重なってきて、4ヶ月以内にいい成果を出して欲しいです.明日から本格的にチームプロジェクトが始まるので楽しみです.頑張りましょう.

6.開発ログ

  • トゥプルと集合した場合、ほとんど使ったことがなかったので、「あ、まだこんなのあるよ」という思いが生まれました.実はtupleはほとんど役に立たないのでよくわかりませんが、集合が分かればこれから役に立つところがたくさんあります.
  • 図例:データ型
    # doc
    people = [{'name':'dongwoo', 'age':29}]
    # tuple
    people = [('dongwoo', 29)]
  • セット:重複除外
    temp = ['a', 'b', 'c', 'a']
    temp_set = set(temp)
    print(temp_2) # {'a', 'b', 'c'}
    
    # 교집합, 합집합
    a = ['a', 'b', 'c', 'd', 'f']
    b = ['b', 'c', 'd', 'f', 'e']
    
    a_set = set(a)
    b_set = set(b)
    
    print(a_set & b_set)  # {'c', 'b', 'd', 'f'}
    print(a_set | b_set)  # {'c', 'd', 'e', 'f', 'b', 'a'}
    
    # 차집합
    student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
    student_b = ['물리1','수학1','미술','화학2','체육']
    
    a_set = set(student_a)
    b_set = set(student_b)
    
    print(a_set - b_set)  # {'음악', '화학1', '국어', '물리2'}
  • format形式は多く使われていますが、Python文法を勉強しながらf-stringを単独で勉強した記憶はないようです.また,符号化過程では多くの例外処理やファイルロードが用いられているため,これが基本知識である.
  • f-string
    scores = [
        {'name':'영수','score':70},
        {'name':'영희','score':65},
        {'name':'기찬','score':75},
        {'name':'희수','score':23},
        {'name':'서경','score':99},
        {'name':'미주','score':100},
        {'name':'병태','score':32}
    ]
    
    for s in scores:
        name = s['name']
        score = s['score']
        print(name+'의 점수는 '+str(score))
        print(f'{name}의 점수는 {score}')
  • 異常処理
    people = [
        {'name': 'bob', 'age': 20},
        {'name': 'carry', 'age': 38},
        {'name': 'john', 'age': 7},
        {'name': 'smith', 'age': 17},
        {'name': 'ben', 'age': 27},
        {'name': 'bobby'},
        {'name': 'red', 'age': 32},
        {'name': 'queen', 'age': 25}
    ]
    
    for person in people:
        try:
            if person['age'] > 20:
                print(person['name'])
        except:
            print(person['name'], 'error')
  • ファイルmain testを読み込みます.py
    from main_func import *
    
    say_hi()
    say_hi_to('dongwoo')
    main_fun.py
    def say_hi():
        print('hi')
    
    def say_hi_to(name):
        print(f'{name} hi!')
  • 今回の講座で最も役に立つ内容はこの部分だと言えば.文系が1行で書いたコードを見るたびに、私はそう理解していましたが、私は一度明確に指摘して、手が届きました.後でコードする時よく使うことができることを望みます中国語
    num = 3
    
    if num % 2 == 0:
        result = 'even'
    else:
        result = 'odd'
    
    result = 'even' if num % 2 == 0 else 'odd'
  • lambda個人的にはあまり直感的ではなく、あまり好きではないと思いますが、map、filterと一緒に使うと、いい感じです.map、listでフィルタリングし直すべき変数はちょっと面倒だと思いますが、まあまあです.
  • map, lambda, filter
    a_list = [1, 3, 2, 5, 1, 2]
    
    b_list = []
    for a in a_list:
        b_list.append(a * 2)
    
    b_list = [a * 2 for a in a_list]
    
    print(b_list) # [2, 6, 4, 10, 2, 4]
  • パラメータとクラス構文は、正直に言うと使用できないかもしれませんが、後でライブラリや関数をインポートするときに必要な内容のようです.
    特に,関数パラメータでは,リストを無制限に渡すことが有用であるようである.
  • 関数パラメータ
    people = [
        {'name': 'bob', 'age': 20},
        {'name': 'carry', 'age': 38},
        {'name': 'john', 'age': 7},
        {'name': 'smith', 'age': 17},
        {'name': 'ben', 'age': 27},
        {'name': 'bobby', 'age': 57},
        {'name': 'red', 'age': 32},
        {'name': 'queen', 'age': 25}
    ]
    
    result = map(lambda person: 'adult' if person['age'] > 20 else 'teenager', people)
    print(list(result))     
    # ['teenager', 'adult', 'teenager', 'teenager', 'adult', 'adult', 'adult', 'adult']
    
    result = filter(lambda person: person['age'] > 20, people)
    print(list(result))
    # [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]
  • # 매개변수 무제한으로 받기
    def cal(*args):
        for name in args:
            print(name)
    
    cal(['a', 'b'])         # ['a', 'b']
    cal(['a', 'b', 'c'])    # ['a', 'b', 'c']
    
    # 매개변수를 키워드와 함께 받기
    def cal2(**kwargs):
        print(kwargs)
    
    cal2(name='dongwoo')            # {'name': 'dongwoo'}
    cal2(name='dongwoo', age='29')  # {'name': 'dongwoo', 'age': '29'}
  • ネットワークプログラミング基礎コース2週間
    すでに知っているか、繰り返している内容はすばやくスキップされ、私が逃した内容や混同しやすい内容だけが記録されています.
  • JQuery入門
    class Monster():
        hp = 100
        alive = True
    
        def damage(self, attack):
            self.hp = self.hp - attack
            if self.hp < 0:
                self.alive = False
    
        def status_check(self):
            print('alive') if self.alive else print('dead')
    
    m1 = Monster()
    m1.damage(150)
    m1.status_check()   # dead
    
    m2 = Monster()
    m2.damage(90)
    m2.status_check()   # alive
  • ajax
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  • タグ属性
    $.ajax({
        type: "GET",
        url: "http://spartacodingclub.shop/sparta_api/rtan",
        data: {},
        success: function (response) {
            let url = response['url']
            let msg = response['msg']
    
            $('#img-rtan').attr('src', url)
            $('#text-rtan').text(msg)
        }
    })
  • を変更
  • homework
     // 이미지 url 변경
    $('#img-rtan').attr('src', url)
    
     // text 변경
    $('#text-rtan').text(msg)
  • Webプログラミング基礎第3週
    JavaScriptではrepeat構文は初めて見たので不思議でした.
    あとは0、1位を羅列する必要があるときに使えるでしょう.
  • javascipt文字列
    <!doctype html>
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
              integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
                integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
                crossorigin="anonymous"></script>
    
        <link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
        <title>스파르타코딩클럽 | 부트스트랩 연습하기</title>
    
        <style>
            * {
                font-family: 'Gowun Dodum', sans-serif;
            }
    
            .mytitle {
                width: 100%;
                height: 250px;
    
                background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://i.ytimg.com/vi/ElHf0dJykug/maxresdefault.jpg');
                background-position: center;
                background-size: cover;
    
                color: white;
    
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content: center;
            }
    
            .mypost {
                width: 95%;
                max-width: 500px;
                margin: 20px auto 0px auto;
                padding: 20px;
                box-shadow: 0px 0px 3px 0px gray;
            }
    
            .mybtns {
                display: flex;
                flex-direction: row;
                align-items: stretch;
                justify-content: left;
    
                margin-top: 20px;
            }
    
            .mycard{
                margin: 20px auto 10px auto;
            }
    
        </style>
    
        <script>
            $(document).ready(function () {
                $.ajax({
                    type: "GET",
                    url: "http://spartacodingclub.shop/sparta_api/weather/seoul",
                    data: {},
                    success: function (response) {
                        let temp = response['temp']
                        $('#temp').text(temp)
                    }
                })
            });
        </script>
    
    </head>
    
    <body>
        <div class="mytitle">
            <h1>레드벨벳 웬디 팬명록</h1>
            <p>현재 기온 : <span id="temp">00.00</span></p>
        </div>
        <div class="mypost">
            <div class="form-floating mb-3">
                <input type="email" class="form-control" id="floatingInput" placeholder="[email protected]">
                <label for="floatingInput">닉네임</label>
            </div>
            <div class="form-floating">
        <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2"
                  style="height: 100px"></textarea>
                <label for="floatingTextarea2">응원댓글</label>
            </div>
            <div class="mybtns">
                <button type="button" class="btn btn-dark">응원 남기기</button>
            </div>
    
            <div class="card mycard">
                <div class="card-body">
                    <blockquote class="blockquote mb-0">
                        <p>사! 랑! 해! 요! 레! 드! 벨! 벳! </p>
                        <footer class="blockquote-footer">kimphysicsman<cite title="Source Title"></cite>
                        </footer>
                    </blockquote>
                </div>
            </div>
    
        </div>
    
    </body>
    
    </html>
  • を繰り返す
  • homework
    let star = 3
    let star_score = '*'.repeat(star)
    
    // star_score == '***'

  • スモールプロジェクトスケルトンの作成
    授業で学んだように、フラスコを利用して簡単にできました.
  • app.py
  • import requests
    from bs4 import BeautifulSoup
    
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
    
    soup = BeautifulSoup(data.text, 'html.parser')
    
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
    trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
    
    for tr in trs:
        rank = tr.select('td.number')
        rank = rank[0].text.split('\n')[0]
        title = tr.select('td.info > a.title.ellipsis')
        title = title[0].text.strip()
        title = title.split('\n')[-1].strip()
        artist = tr.select('td.info > a.artist.ellipsis')
        artist = artist[0].text
        print(rank, title, artist)
  • index.html
    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    # HTML 화면 보여주기
    @app.route('/')
    def home():
        return render_template('index.html')
    
    @app.route('/dongwoo')
    def dongwoo_page():
        return render_template('dongwoo.html')
    
    @app.route('/heejeong')
    def heejeong_page():
        return render_template('heejeong.html')
    
    @app.route('/jinyoung')
    def jinyung_page():
        return render_template('jinyoung.html')
    
    @app.route('/songhee')
    def songhee_page():
        return render_template('songhee.html')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000, debug=True)