「len」を含む日記 RSS

はてなキーワード: lenとは

2024-01-22

ブコメダブスタをチェックするためのスクリプト適当Pythonで書いた

エラーハンドリングは省略。標準ライブラリのみで動く。

import json
import urllib.request


# True にするとユーザー名を隠す
hide_user = False
# 以下を書き換える。sys.argv 使ってもいいんだけど
url1 = "https://www.cygames.co.jp/news/id-23172/"
url2 = "https://mtg60.com/archives/palworlddoujinsi.html"


def get_bookmarks(url: str):
    req = urllib.request.Request(f"https://b.hatena.ne.jp/entry/json/{url}")
    with urllib.request.urlopen(req) as res:
        dict = json.loads(res.read())

    user_comments = {}

    for bookmark in dict["bookmarks"]:
        if bookmark["comment"]:
            user_comments[bookmark["user"]] = bookmark["comment"]

    return user_comments


b1 = get_bookmarks(url1)
b2 = get_bookmarks(url2)

common = set(b1.keys()).intersection(b2.keys())

print(f"[1] {url1}")
print(f"[2] {url2}")
print()

for user in sorted(common):
    if hide_user:
        print(user[0] + "*" * (len(user) - 1))
    else:
        print(user)
    print(f"[1] {b1[user]}")
    print(f"[2] {b2[user]}")
    print()

2024-01-21

エクセルの桁そろえにREPT関数使ってた

=REPT("0",4-LEN(A4))&A4

みたいな感じにして、指定の桁数から文字数を引いて余りを追加するイメージ

例えば、4桁にそろえたくて1桁だとしたら4-1で3つ「0」を追加する

今日知ったのが以下の方法で、

=RIGHT(A1+10000, 4)

1万を足して右から4桁とるという方法

例えば、A1に1があるとしたら10001になって右から4桁、100だとしたら10100になって右から4桁見たいか感じで揃えることができる。10000の部分は揃えたい桁に合わして変更する

2023-12-29

増田納め 2023年のマイ日記集計

こんます

2023年も残すところわずかとなりましたが、皆様方におかれましてはいかがお過ごしでしょうか。

一年間の振り返りなどはされましたでしょうか。

 

私、一年間に書いた増田を振り返ってみましたところ、

2423件の日記を綴っており、

頂いた総ブクマ数は1893、総トラバ数は1060となりました。

これもひとえに皆様方のご支援ご声援のおかげであります

本年も大変お世話になりました。

 

最期に、ポンコツの私がChatGPTの手となり足となり作成した増田集計コード掲載します。

日記URLタイトル投稿日時、文字数、被ブクマ数、被トラバ数を取得しCSVファイルに出力するものです。

お暇な方はお使いください。

 

それではよいお年をお迎えください。

import requests
from bs4 import BeautifulSoup
import time
import csv
import os
import re


# ログインURL
login_url = 'https://hatelabo.jp/login'

# ログイン情報
login_data = {
    'key': 'あなたユーザ名またはメールアドレス',
    'password': 'あなたパスワード',
    'mode': 'enter'
}

user_name = 'あなたユーザ名'

# User-Agent ヘッダー(例:Google Chrome)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# セッションを開始
session = requests.Session()
# ログイン
response = session.post(login_url, data=login_data, headers=headers)
print('login',response.status_code)

# 集計データ
item = {
    'url': '', # URL
    'title': '', # タイトル
    'datetime': '', # 投稿日時
    'characters': '', # 文字数
    'bookmark': '', # 被ブクマ数
    'trackback': '', # 被トラバ数
}

# CSVファイル名
output_file = 'masuda_output.csv'
# CSVファイル存在しない場合はヘッダーを書き込む
if not os.path.exists(output_file):
    with open(output_file, 'w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=item.keys())
        writer.writeheader()


# 集計
page_start = 1
page_end = 3
for i in range(page_start, page_end+1):
    
    # 待機
    time.sleep(3)

    # 増田一覧取得
    page = session.get(f'https://anond.hatelabo.jp/{user_name}/?page={i}')
    print(page.url)
    
    # 応答のHTMLをBeautifulSoupで解析
    soup = BeautifulSoup(page.content, 'html.parser')
    
    entries = soup.find_all('div', class_='section')
    for entry in entries:
        header = entry.find('h3')

        timestamp = header.find('a').get('href')[1:]
        item['url'] = 'https://anond.hatelabo.jp/'+timestamp
        item['title'] = header.get_text()[:-1]
        item['datetime'] = f"{timestamp[0:4]}/{timestamp[4:6]}/{timestamp[6:8]} {timestamp[8:10]}:{timestamp[10:12]}"

        footersection_text = entry.find_all('p')[-2].get_text()            
        item['characters'] = len(entry.find('p').get_text().strip(footersection_text))
        item['trackback'] = int(re.search(r'\((.*?)\)', footersection_text).group(1) if re.search(r'\((.*?)\)', footersection_text) else '')
        if item['title'] == '■':
            item['title'] = entry.find('p').get_text().strip(footersection_text)[:35]

        # 待機
        time.sleep(3)

        bookmark_page = session.get(f'https://b.hatena.ne.jp/entry/button/?url=https%3A%2F%2Fanond.hatelabo.jp%2F{timestamp}&layout=basic-label-counter&lang=ja')
        soup_b = BeautifulSoup(bookmark_page.content, 'html.parser')
        item['bookmark'] = int(soup_b.find('a', class_='count').get_text())

        # CSVファイル追記
        with open(output_file, 'a', newline='', encoding='utf-8') as file:
            writer = csv.DictWriter(file, fieldnames=item.keys())
            writer.writerow(item)

追記

わー。ごめんなさい。文字が何か所か変わっていました。

\ → \

& → アンドマーク(打てない←なんで~?)

2023-12-17

プログラミング初心者です。以下のコードの誤りはなんですか

僕はプログラミング歴2週間の初心者です。キーと値を入力できるデータベースを作っています

以下のコードを実行してデータを追加し続けると、一定サイズを超えるとエラーが出てしまうみたいです。

理想は、データが追加された後にサイズが足りなくなったら動的に自動拡大されることです。

もし詳しい人がいたらご教示お願い致します。

import sys
import os
import mmap
import hashlib

def h(x):
    return int(hashlib.sha512(x.encode()).hexdigest(), 16)

def create_db(filename):
    with open(filename, 'wb') as f:
        f.write(b'\0' * 1024 * 1024)  # 1MBの空ファイル作成

def set_key(filename, key, value):
    with open(filename, 'r+b') as f:
        mm = mmap.mmap(f.fileno(), 0)
        pos = h(key) % mm.size()
        while mm[pos:pos+1] != b'\0':
            pos = (pos + 1) % mm.size()
            if pos == h(key) % mm.size():
                f.seek(0, os.SEEK_END)
                f.write(b'\0' * mm.size())  # ファイルサイズを2倍にする
                mm = mmap.mmap(f.fileno(), f.tell())  # ファイルサイズを反映させる
                pos = h(key) % mm.size()  # ハッシュ値を再計算する
        data = key + '\0' + value + '\0'
        data = data.encode()
        mm[pos:pos+len(data)] = data
        mm.close()  # mmapオブジェクトを閉じる

def get_key(filename, key):
    with open(filename, 'r+b') as f:
        mm = mmap.mmap(f.fileno(), 0)
        pos = h(key) % mm.size()
        while mm[pos:pos+1] != b'\0':
            end = mm.find(b'\0', pos, mm.size())  # 第2引数と第3引数指定する
            if end == -1:
                end = mm.size()
            if mm[pos:end].decode() == key:
                pos = end + 1
                end = mm.find(b'\0', pos, mm.size())  # 第2引数と第3引数指定する
                if end == -1:
                    end = mm.size()
                value = mm[pos:end].decode()
                mm.close()  # mmapオブジェクトを閉じる
                return value
            pos = (pos + 1) % mm.size()
            if pos == h(key) % mm.size():
                break
        mm.close()  # mmapオブジェクトを閉じる
        return None

def main():
    cmd = sys.argv[1]
    if cmd == 'create':
        create_db(sys.argv[2])
    elif cmd == 'set':
        set_key(sys.argv[2], sys.argv[3], sys.argv[4])
    elif cmd == 'get':
        print(get_key(sys.argv[2], sys.argv[3]))

if __name__ == '__main__':
    main()
 

2023-08-25

test

https://chat.openai.com/share/c80d83ea-752b-4561-a162-7ea0bd116d56

CSVVBAエクセル

Option Explicit

Dim objExcel, objWorkbook, objWorksheet

Dim strFolderPath, strSourceFile, strTargetFile, strSearchString, strReplaceString

Dim intLastRow, intRow, intColumn

' Excelオブジェクト作成

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True

' フォルダパスファイル名の設定

strFolderPath = ".\" ' スクリプトと同じフォルダにあることを仮定

strSourceFile = "変更一覧.xlsx"

strTargetFile = "変更一覧.xlsx"

' Excelファイルを開く

Set objWorkbook = objExcel.Workbooks.Open(strFolderPath & strSourceFile)

' シートのコピー名前の変更

objWorkbook.Sheets("1月").Copy , objWorkbook.Sheets("1月").Index

objWorkbook.Sheets("1月 (2)").Name = "2月"

' セルの値の置換

Set objWorksheet = objWorkbook.Sheets("2月")

objWorksheet.Cells(1, 1).Value = Replace(objWorksheet.Cells(1, 1).Value, "1月", "2月")

objWorksheet.Cells(2, 7).Value = Replace(objWorksheet.Cells(2, 7).Value, "2023/2/14", "2023/3/14")

' 最終行の取得

intLastRow = objWorksheet.Cells(objWorksheet.Rows.Count, 1).End(-4162).Row ' xlUp

' 値のクリア

For intRow = 8 To intLastRow

For intColumn = 1 To 6

objWorksheet.Cells(intRow, intColumn).ClearContents

Next

Next

' テキストファイルの読み込み

Dim objFSO, objTextFile, strContents, arrLines, arrFields, strNewContents

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objTextFile = objFSO.OpenTextFile(strFolderPath & "変更一覧.txt", 1)

strContents = objTextFile.ReadAll

objTextFile.Close

' フィールド区切り文字カンマに設定してデータを分割

arrLines = Split(strContents, vbNewLine)

For Each strContents In arrLines

arrFields = Split(strContents, ",")

For Each strContents In arrFields

If IsNumeric(strContents) Then

strNewContents = strNewContents & "'" & strContents & ","

Else

strNewContents = strNewContents & strContents & ","

End If

Next

strNewContents = Left(strNewContents, Len(strNewContents) - 1) & vbNewLine

Next

' データをシートに貼り付け

Set objWorksheet = objWorkbook.Sheets("2月")

objWorksheet.Cells(1, 8).Value = strNewContents

' セルの値の置換

objWorksheet.Cells(123, 1).Value = Replace(objWorksheet.Cells(123, 1).Value, "F", "FH")

' Excelファイルを保存して閉じる

objWorkbook.Save

objWorkbook.Close

objExcel.Quit

' オブジェクト解放

Set objWorksheet = Nothing

Set objWorkbook = Nothing

Set objExcel = Nothing

Set objFSO = Nothing

Set objTextFile = Nothing

WScript.Echo "スクリプトの実行が完了しました。"

2023-04-26

メモ

Sub CheckForGarbledCharacters()

Dim ws As Worksheet

Dim rng As Range

Dim cell As Range

Dim char As String

Dim i As Integer

Dim garbledFound As Boolean

Dim unicodeVal As Long

garbledFound = False

' すべてのワークシートをチェックします。

For Each ws In ThisWorkbook.Worksheets

Set rng = ws.UsedRange

' 各セルスキャンして文字化けがないかチェックします。

For Each cell In rng

For i = 1 To Len(cell.Value)

char = Mid(cell.Value, i, 1)

unicodeVal = AscW(char)

' ASCII範囲日本語範囲を除外

If Not ((32 <= unicodeVal And unicodeVal <= 126) Or (12353 <= unicodeVal And unicodeVal <= 12447) Or (12448 <= unicodeVal And unicodeVal <= 12543) Or (65382 <= unicodeVal And unicodeVal <= 65439) Or (19968 <= unicodeVal And unicodeVal <= 40959)) Then

MsgBox "文字化けが見つかりました: " & vbCrLf & _

"ワークシート: " & ws.Name & vbCrLf & _

"セル: " & cell.Address & vbCrLf & _

"セルの値: " & cell.Value & vbCrLf & _

"文字化けしている文字: " & char, vbExclamation

garbledFound = True

Exit For

End If

Next i

' 文字化けが見つかった場合、次のワークシートへ移動します。

If garbledFound Then Exit For

Next cell

If garbledFound Then Exit For

Next ws

If Not garbledFound Then

MsgBox "文字化けが見つかりませんでした。", vbInformation

End If

End Sub

2023-04-19

anond:20230419115036

ちなみにジョジョ三部最終話とき掲載順位

1 ろくでなしBLUES 巻頭カラー VOL.191 SHE SMILED SWEETLY

2 電影少女 VIDEO-GIRL-LEN 新連載 カラー CHAPTER1(青天のへきれき)

3 DRAGON BALL 其之三百六十九 人造人間セル

4 SLAM DUNK #77 ROOKIE SENSATION

5 DRAGON QUEST ダイの大冒険123話 閃光の大逆襲!!!の巻

6 幽☆遊☆白書 呪氷使い・凍矢!!の巻

7 モンモンモン 楽しい給食の巻

8 新ジャングルの王者ターちゃん♡ No.204 ダン王国の正体!?の巻

9 チェンジUP!! 第8投 愛する資格

10 爆発!宇宙クマさん タータ・ベア&菊千代くん 第3話 宿命ライバルと減点パパの巻

11 柳生烈風剣連也 斬乃六 その頃ペルシャでは・・・

12 ペナントレース やまだたいちの奇蹟 第44回 スワローズ戦⑤・ただいま三冠王!

13 超機動暴発蹴球野郎 リベロ武田 その55 サッカー成金になりたい!!の巻

14 まじかる☆タルるートくん タルるート人生最良の日!?の巻

15 こちら葛飾区亀有公園前派出所 暴走!一寸法師の巻

16 ジョジョの奇妙な冒険 100年間の貸しの巻

17 魔神冒険譚-アラビアン-ランプ・ランプ 第18夜 捨て去った感情

18 花の慶次 -雲のかなたに- 熱風!小田原陣の章 巻十八、拳の熱さ

19 アウターゾーン 第19話 妖精を見た!(前編)

かに黄金期だしDB幽白スラダン三本柱もあるとはいえここまで低いか?とはなるよ。

2022-12-24

誰も予測できない投稿

匿名ダイアリーに書きたいな〜と思ったときに、どんなカテゴリーで書くか悩んだときに決める方法

import requests

topics = """カテゴリーの一覧を改行して書く""".split("\n")

i = int(requests.get("https://qrng.anu.edu.au/wp-content/plugins/colours-plugin/get_one_hex.php").text, 16) % len(topics)

print(topics[i])

2022-08-24

anond:20220824182342

これ優秀やね。元増田のやつよりお手軽。

あとせっかくだからサムネイルを並べて表示するコードを紹介しとこう。

import matplotlib.pyplot as plt

num_inference_steps = 10            # Number of denoising steps
guidance_scale = 7.5                # Scale for classifier-free guidance
batch_size = 1

def show_images(images, figsize=(20,10), columns = 5):
  plt.figure(figsize=figsize)
  for i, image in enumerate(images):
      plt.subplot(len(images) / columns + 1, columns, i + 1)
      plt.imshow(image)

#入力文字 ここに好きな禁則文字をいれてください
prompt = ["hatena anonymous diary"]

# 画像サイズ
height = 512                        # default height of Stable Diffusion
width = 512                         # default width of Stable Diffusion

# SEED値、ここをかえると 同じ入力文字でも別の画像がでます
seedId = 1

images = []
for i in range(5):
  generator = torch.manual_seed(seedId + i)
  print(seedId + i)
  image = run(prompt,generator,height,width,num_inference_steps,guidance_scale,batch_size)
  images.append(image)

show_images(images)

2022-03-23

Powershell

Convert-Stringってコマンドコマンドレット)がある。

使い方は、例を見てもらったほうが速いので、以下。

入力

("Hatsune Miku","Kagamine Rin","Kagamine Len") | Convert-String -Example "Kasane Teto=K. Teto"

出力

H. Miku
K. Rin
K. Len

やれることはわかった。

ただ、大文字/小文字判断や順番が入れ替わると対応できず、柔軟性はそれほどない。

これ、どういうときに使うと便利なやつ?

2021-12-10

Excel文字数を数えるLEN関数ってのがあるんだけど、

CSVデータをあげるときに厳密にバイトで数えたいのに全角は2文字分と数えてくれない。

結局1行1行テキストエディタに貼り付けて文字数が、例えば255バイトに収まるように数えているんだけど、なんかこれってアホらしくない?

21世紀になってセル文字数も数えられないとか、

意外と不便なところがあって、なんとかして欲しい。

それか何か良い方法があればよいが。

2021-07-19

https://anond.hatelabo.jp/20210719192035

もう対抗馬さんは出てこなくなっちゃったのかね。

さみしいので俺が書いとくわ。

2021/07/20(火) の予測値 1,084 (95%予測区間 902 ~ 1,258)
2021/07/21(水) の予測値 1,350 (95%予測区間 1,177 ~ 1,534)
2021/07/22(木) の予測値 1,611 (95%予測区間 1,437 ~ 1,782)
2021/07/23(金) の予測値 1,555 (95%予測区間 1,384 ~ 1,757)
2021/07/24(土) の予測値 1,612 (95%予測区間 1,436 ~ 1,796)
2021/07/25(日) の予測値 1,273 (95%予測区間 1,088 ~ 1,452)

2021/07/26(月) の予測966 (95%予測区間 783 ~ 1,145)
2021/07/27(火) の予測値 1,332 (95%予測区間 1,134 ~ 1,519)
2021/07/28(水) の予測値 1,649 (95%予測区間 1,429 ~ 1,854)
2021/07/29(木) の予測値 1,957 (95%予測区間 1,722 ~ 2,205)
2021/07/30(金) の予測値 1,879 (95%予測区間 1,617 ~ 2,128)
2021/07/31(土) の予測値 1,938 (95%予測区間 1,675 ~ 2,220)
2021/08/01(日) の予測値 1,523 (95%予測区間 1,290 ~ 1,771)

2021/08/02(月) の予測値 1,151 (95%予測区間 949 ~ 1,378)
2021/08/03(火) の予測値 1,579 (95%予測区間 1,296 ~ 1,852)
2021/08/04(水) の予測値 1,948 (95%予測区間 1,615 ~ 2,267)
2021/08/05(木) の予測値 2,302 (95%予測区間 1,959 ~ 2,715)
2021/08/06(金) の予測値 2,203 (95%予測区間 1,768 ~ 2,611)
2021/08/07(土) の予測値 2,264 (95%予測区間 1,851 ~ 2,739)
2021/08/08(日) の予測値 1,773 (95%予測区間 1,391 ~ 2,155)

2021/08/09(月) の予測値 1,336 (95%予測区間 1,035 ~ 1,668)
2021/08/10(火) の予測値 1,827 (95%予測区間 1,425 ~ 2,258)
2021/08/11(水) の予測値 2,247 (95%予測区間 1,728 ~ 2,794)
2021/08/12(木) の予測値 2,648 (95%予測区間 2,054 ~ 3,296)
2021/08/13(金) の予測値 2,526 (95%予測区間 1,876 ~ 3,184)
2021/08/14(土) の予測値 2,590 (95%予測区間 1,918 ~ 3,317)
2021/08/15(日) の予測値 2,023 (95%予測区間 1,482 ~ 2,618)

2021/08/16(月) の予測値 1,520 (95%予測区間 1,060 ~ 1,983)
2021/08/17(火) の予測値 2,075 (95%予測区間 1,440 ~ 2,719)
2021/08/18(水) の予測値 2,545 (95%予測区間 1,766 ~ 3,377)
2021/08/19(木) の予測値 2,994 (95%予測区間 2,065 ~ 4,002)
2021/08/20(金) の予測値 2,850 (95%予測区間 1,946 ~ 3,818)
2021/08/21(土) の予測値 2,916 (95%予測区間 2,006 ~ 3,900)
2021/08/22(日) の予測値 2,273 (95%予測区間 1,443 ~ 3,069)

ついでにソースも公開しとくわ。Google Colaboratory に貼ればそのまま動く。

見ての通り、単に過去感染者数を Facebook Prophet に放り込んだだけの単純なモノ。人流も変異株もワクチンも全く考慮ナシ。

適当に改良よろ。

!pip install -q fbprophet
from fbprophet import Prophet
import pandas as pd
!wget --no-check-certificate --output-document=covid19_tokyo.json 'https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/development/data/data.json'
data = pd.read_json('covid19_tokyo.json')
date_data = []
posi_data = []
for i in range(len(data['patients_summary']['data'])):
    date_data.append(data['patients_summary']['data'][i]['日付'])
    posi_data.append(data['patients_summary']['data'][i]['小計'])
data=pd.DataFrame({'ds': date_data, 'y': posi_data})
data['ds'] = data['ds'].astype('datetime64')
model = Prophet(interval_width=0.95, changepoint_range=1.0, changepoint_prior_scale=0.5, seasonality_prior_scale=10.0, seasonality_mode='multiplicative',  n_changepoints=50)
model.fit(data)
future = model.make_future_dataframe(periods=35, freq='D')
forecast = model.predict(future)
model.plot(forecast);

2020-10-15

poetry cache clearの仕様おかし

% poetry cache clear --help
USAGE
  poetry cache clear [--all] <cache>

ARGUMENTS
  <cache>                The name of the cache to clear.

OPTIONS
  --all                  Clear all entries in the cache.

GLOBAL OPTIONS
  -h (--help)            Display this help message
  -q (--quiet)           Do not output any message
  -v (--verbose)         Increase the verbosity of messages: "-v" for normal output, "-vv" for more verbose output and "-vvv" for debug
  -V (--version)         Display this application version
  --ansi                 Force ANSI output
  --no-ansi              Disable ANSI output
  -n (--no-interaction)  Do not ask any interactive question

これ見ると

poetry cache clear pypi

で動きそうじゃん?

% poetry cache clear pypi

  RuntimeError

  Add the --all option if you want to clear all pypi caches

  at /usr/local/lib/python3.8/site-packages/poetry/console/commands/cache/clear.py:44 in handle
      40│         )
      41│ 
      42│         if len(parts) == 1:
      43│             if not self.option("all"):
    → 44│                 raise RuntimeError(
      45│                     "Add the --all option if you want to clear all "
      46│                     "{} caches".format(parts[0])
      47│                 )
      48│ 

ブブー

動きません

正しくはこう

poetry cache clear pypi --all

オプションって何だよ哲学か?

直感的には--allをついてたら全てのキャッシュを消すべきだと思うが

% poetry cache clear --all 
Not enough arguments (missing: "cache").

ブブー

動きません

`--allって何だよ哲学か?

意味不明に思ったのは俺だけではないらしくIssueが出ている

https://github.com/python-poetry/poetry/issues/521

opened this issue on 19 Oct 2018 · 18 comments

2年前ですよ2年前!

Issue700個も溜まってます

ちゃんメンテしてるぅ?

pipenvもアレだったけどpoetryもアレだな

もう少しマシな奴が欲しい

2020-06-12

anond:20200612120752

以下のソースが何をやっているか答えてみせろ

def myfunc(arr):
    if len(arr) <= 1:
        return arr

    left = []
    right = []

    ref = arr[0]
    ref_count = 0

    for e in arr:
        if e < ref:
            left.append(e)
        elif e > ref:
            right.append(e)
        else:
            ref_count += 1

    left = myfunc(left)
    right = myfunc(right)

    return left + [ref] * ref_count + right

2019-03-12

Ruby経験者がPythonlenを見て「一貫性が無い」って文句言う率は9割を超えると言われている(誰に?)

2019-01-01

Graphviz を使って Python抽象構文木を生成する。



1. こんな感じで使います


1.1. スクリプトとして使用する。

$ python parser.py sample.py


1.2. モジュールとして使用する。

import parser
code = '''
a  = 1 + 1
print(a)
'''
graph = parser.create_graph(code)
graph.render("sample")


2. ソースコード parser.py はこんな感じです。

import ast
import sys
import graphviz


def create_graph(lines):
    graph = graphviz.Graph(format='png')
    root = ast.parse(lines)
    node_list = [root]
    _setup(graph, node_list)
    return graph


def _setup(graph, node_list):
    # node
    node = node_list[-1]
    node_identity = str(len(node_list))
    node_name = type(node).__name__
    graph.node(node_identity, node_name)

    # children
    for child in ast.iter_child_nodes(node):
        node_list.append(child)
        child_identity = str(len(node_list))
        graph.edge(node_identity, child_identity)
        _setup(graph, node_list)


if __name__ == '__main__':
    file_name = sys.argv[1]
    with open(file_name) as file:
        lines = file.read()
    graph = create_graph(lines)
    graph.render(file_name)

2018-12-23

anond:20181223184745

この辺になってくると初心者の人は面倒かな?

解説をつければかなりわかりやす

基本的な書き方


class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};


STL化したもの

class mystringV
{
public:
	std::vector<char> buffer;
	mystringV()
	{
		buffer.resize(2);
		buffer[0] = ' ';
		buffer[1] = NULL;
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer.resize(len+1);
		strcpy(&buffer.at(0), t);
	}

	void operator = (const mystringV&src)
	{
		buffer = src.buffer;
	}

	mystringV& operator + (const char*t)
	{
		int len = strlen(&buffer.at(0));
		int len2 = strlen(t);

		buffer.resize(len + len2 + 47);

		strcpy(&buffer.at(0) + len, t);

		return *this;
	}
	mystringV&  operator + (const mystringV&src)
	{
		return ((*this) + &src.buffer.at(0));
	}

};

考察

様々な話はあるものSTLの方を使えば

いろんな事をプログラマにかわってライブラリがやってしまうということ

どうなんだろうね。

この辺は あまりしっかり おしえてもらえないところではある。

でも プロならみんな 知っている

anond:20181223183225

初心者

class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};

	mystring my_space_org;
	for (int i = 0; i < 8; i++) {
		mystring space;
		space = my_space_org + " ";
		printf("%sHello world\n", space.buffer);
		my_space_org = space;
	}

2018-06-29

while True:
    num = input()
    '数値ではありません' if not num.isdigit() else '4桁ではありません' if len(num) != 4 else [i for i in num]

from typing import Sequence


class ReverseSequence(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence  # reference to container
        self.index = len(sequence)  # current index

    # Step 1. define __iter__ method whitch returns self.
    def __iter__(self):
        return self

    # Step 2. define __next__ method
    #             rasing StopIteration at the end of iteration.
    def __next__(self):
        if self.index > 0:
            self.index = self.index - 1  # next index
            return self.sequence[self.index]
        else:
            raise StopIteration


class ReverseSequenceGenerator(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence
        self.index = len(sequence)

    def __iter__(self):
        while self.index > 0:
            self.index = self.index - 1
            yield self.sequence[self.index]
        raise StopIteration


assert list.__eq__(
    [element for element in ReverseSequence('spam')],
    [element for element in ReverseSequenceGenerator('spam')]
)

class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


class ReverseGenerator:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        while True:
            if self.index == 0:
                raise StopIteration
            self.index = self.index - 1
            yield self.data[self.index]


assert [s for s in Reverse('spam')] == [s for s in ReverseGenerator('spam')]

2017-11-27

pythonの問題です。100点満点のテストの最低点、平均点、最高点を求めたい。以... - Yahoo!知恵袋

地道に

score_list = []

while True:
    score = int(input())
    if score == -1: break
    score_list.append(score)

print(min(score_list))
print(sum(score_list) // len(score_list))  # // round off
print(max(score_list))


itertools を使って

itertools でこうか... すごい.., これが generator か..

itertools.takewhile の lambda x: x != -1 が False になると

itertools.repeat も yeild を止めるのか..

import itertools
score_list = list(itertools.takewhile(lambda x: x != -1, (int(input()) for i in itertools.repeat(None))))
print(min(score_list), sum(score_list) // len(score_list), max(score_list), sep="\n")

itertools.repeat

itertools.takewhile

PEP 255 -- Simple Generators | Python.org

2017-04-08

http://anond.hatelabo.jp/20170408201211

へー

lengthと最後の要素のインデックスが一致するから

もう

for(i = 0;i<len(array);i++)</p>

みたいなので慣れてしまたから俺は却って間違えそうだが。

まあ1始まり言語はiterativeな要素をリストとして返してそれぜんぶにt

だるくなった

適当に補完しといて

2016-01-03

「そのコード、別の書き方ができますよ」がうざい

やってることは変わらないんですよ。

例えば、数値文字列を1文字ごとに分解して、文字を数値に変換したリストを作れって言われたらこう書くとする。

僕「こう書いてみた」

a = [int(x) for x in '123']
print(a)

A君「こういう書き方も出来るよ。」

a = list(map(int, [x for x in '123']))
print(a)

B君「俺ならこうだな。」

s = '123'
a = []
i = 0
while len(s) > i:
    a.append(int(s[i]))
    i += 1
print(a)

qiitaとかでこの例のような短いコードでなら、いろんな書き方を提示してくれるのはいいんだよ。歓迎する。

しかし、githubなどのコード共有サイトではうざいだけ。

それ、やってること同じじゃんみたいな。

僕のもA君のもB君のでもやってる事は同じなんだよ。

そんなんでいちいちpull requestするなっていうね。

もっと効率的な別のアルゴリズムを選択して高速化したとかならいいけどそうじゃないだろ。

特にいろんな関数が用意されているPHP使いであPHPerに多そうなイメージ

ログイン ユーザー登録
ようこそ ゲスト さん