「print」を含む日記 RSS

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

2024-03-17

小3の先日のテストに出た問題の一つ。大学受験でも解けない学生がいっぱいいるだろうし、数学好きを除き多くの大人は解けないだろう。 - Togetter

https://togetter.com/li/2332954

さくっとコード解決

let box = new Array(30).fill(0);
for(let i = 1; i <= 30; i++) {
	for(let j = i; j <= 30; j += i) {
		box[j - 1]++;
	}
}
print("1. ", box.filter(v => v === 2).length);
print("2. ", box.filter(v => !(v % 2)).length);

1. 10

2. 25

https://ideone.com/MCcW3D

2024-03-02

エクセルマクロのお作法計算用シートという諸悪の根源について)

前置き

この日記の内容は、会社の後輩から最近エクセルマクロ勉強し始めて(キラキラ)」という話を聞いて、先輩ムーブかますために話した内容になります

とにかくこれから説明する「計算用シート」が憎くて憎くてたまらず、ちょっと引かれるほど熱弁してしまいました。

ただ、他の方がどうされているのかや、逆に「計算用シート」を愛用する方の意見も聞きたくなり、増田に書いてみました。

増田の経歴

この記事趣旨

エクセルマクロのお作法とか書きましたが、要するにエクセルマクロで「計算用シート」って色々な意味でよくないよね、という話をしたいです。

3行でまとめます

〇 エクセルシートはユーザーインターフェースインプット)か出力結果(アウトプット)のためのものとすべき

〇 データ加工をする場合には、原則配列辞書配列連想配列)に格納して加工を行い、最後の結果だけシートに出力するべき

〇 何事にも例外はある。

計算用シートとは

この記事では、エクセルシートを下記の通り分類します。

エクセルマクロにも色々あると思いますが、今回は下記を想定します。

日付や人物名などを入力し、データベースや別のエクセルファイル、別のシートから取得したデータ入力された値を基に加工し、加工後のデータをシートに出力する

この場合入力欄があり編集可能なシートがユーザーインターフェース、最終的に加工されたデータが出力されるシートが出力結果です。

(もちろん、ユーザーインターフェースの別の欄(セル)に出力する場合もあるし、その場合ユーザーインターフェース出力結果が一体のものとみなします。)

また、データ用シートは同じエクセルファイル内に基となるデータが含まれ場合を想定します。

(これ自体が非推奨で、SQLデータベースかせめてAccessを使え、という意見はありますがそれは別にして…)

ではここで定義する計算用シートとはなにかというと、文字通り計算を行うためのシートです。

例えばイメージするのはこんなマクロです。

1.元となるcsvファイルエクセルに読み出してシートに格納

2.そのデータは日付が数値型になっているので、日付(数値型)の入った列を文字列に変換した日付(文字列型)列を新たに作成

3.その列をキーとして対象となるデータを取り出すvlookup関数を各行に格納した列を新たに作成

4.その列で特定された列をさらに加工した列を新たに作成し、…

これは極端な例ですが、とにかく変数配列定義せず(あるいはエクセルセルオブジェクト変数のように扱い)、エクセルに値を入力し、それを直接加工することで目的となるデータ加工をしたり、様々な処理をします。

その舞台となるのが、計算用シートです。

なんかこんな感じの処理をしているエクセルマクロ、どこの会社でも腐るほどあるんじゃないでしょうか。

ある程度マクロに慣れた気の利く人なら、このシートはロック非表示にして、ユーザーから触れないようにするでしょう。

・・・これ、やめたほうが良くないですか?

こいつが日本生産性を落とす諸悪の根源だと思います

駄目な理由

ある程度詳しい人なら同意してくれると思いますが、このやり方でダメ理由はいっぱいあります

後で説明する配列辞書配列連想配列)と比べると格段に処理が遅いです。

わざわざエクセル操作しているから当然ですね。

ちょっと詳しい人が知っている「画面更新非表示」を駆使しても、配列を使った処理からみれば止まったハエです。

(参考)VBAで作ったマクロの高速化① 配列を使う

  • 可読性が下がる

いったんエクセルシートにデータを格納して加工しているので、コードエクセルシートを両方見る必要があり、とても読みにくいです。

変数として命名されていないのも致命的で、処理の意図が余計に分からなくなります

計算用シートを事前に用意して、別のセル関数を格納しておき、マクロ関数を使ってデータ加工をするものも見たことがあります

これは懲役刑に処したほうがいいと思います

まり知られていませんが、セルの最大文字数は32,767 文字です。

セルの最大文字数を超えると自動的に隣のセルに値が入り、シートが滅茶苦茶になります

他にもエクセルの数値を丸め自動変換の仕様とか文字列→日付の自動変換とか、いくつものバグに苦しめられます

できる人だと、いちいち最大文字数が多い場合の処理を書いたり自動変換機能を殺したりしてくれますが、そんなことに手間をかけているか日本GDPは上がらないんだと思います

他にも、データが大きくなると処理が重くなり不安定になる、計算用シートを人が触ってしまリスクがある、などいくらでも理由は上げられます

(逆に利点は、目の前でガチャガチャ動いてスーパーハッカーになった気分になれるくらいしか思いつかない・・・

じゃあどうするの

配列を使いましょう。

配列とは何ぞや、という人はググってください。

配列データを入れて、データ加工は配列変数に対して行い、一番最後の出力だけセルに値を格納する。

他のプログラミング言語なら普通にやっていることです。

個人的オススメしたいのは辞書配列連想配列)で、うまく使うとデータ管理簡単になり、処理も爆速になります

(参考)【VBA】大量データから高速で値を検索【Dictionaryを使う】

csvファイルもなまじエクセルで開けるだけに別のブックやシートで開きがちですが、これは悪魔のささやきです。

直接ファイルを読み出してLine InputやSplitで配列に格納しましょう。

エクセルとして開くやり方はコード書くのは簡単でも、実行時間に天と地ほどの差が出ますエクセル開くと処理もめちゃ不安定です。

(参考)Excel VBAでCSVオープンするときのパフォーマンス比較

いや、冒頭のマクロを書く人の気持ちも分かるつもりです。自分コードを書き始めたころは全部シート上で操作していました。

冒頭のマクロのほうが直感的なんですよね。自分が手で書くことをマクロやらせる、というマクロ本来趣旨にはあっていますし。

途中の計算過程もすべて目の前で展開されるから分かりやすいです。

ただ、それではダメなんです。。。処理は遅いし挙動不安定だし後で改修・保守する人が死にます

あと、エクセルシートやセルは当然エクセルしかないので、エクセルマクロVBAから他の言語に移れなくなります

自分エクセルマクロの里の出なので、計算用シート脱却には苦労しましたが、苦労して会得した配列辞書配列連想配列)のスキルはそのまま他の言語に活かすことができました。

配列の中身を見る方法別にある(ローカルウィンドウやDebug.printを使うなど)ので、リハビリに取り組んでほしいです。

(参考)VBA デバッグの仕方

もちろん例外もあります

計算用シートを許容できる、使うべきケースもあると思います。。

個人的には、

最後のは、なんでも自分確認しないと気が済まない上司発注で、意味不明と思いましたしたがしぶしぶやりました。)

などの場合計算用シートを使ってもよいと思います

この場合インプットエクセルシートに直接加工するのは論外なので、計算用(加工用)のシートを用意してそこで操作を行うことは必要だと思います

他にも、こういうときは「計算用シート」があったほうが良い、という状況があれば教えてもらえると嬉しいです。

最後

そもそもツッコミとして、「データ加工するならエクセルマクロを使わずpythonとかRとかもっとまともな言語使えよ」という言葉が来そうな気がします。

ただ、個人的にはエクセルマクロVBA)は大好きですし、初心者にもおすすめしたいです。

自分のような非エンジニアだと、セキュリティ関係などでPythonの開発環境とかすごく用意しにくいんですよね。

(あと、コマンドプロンプトの真っ黒な画面が怖かった)

その点エクセルマクロは、開発環境の用意はプロパティでチェック項目を一つオンにするだけだし、入門書がたくさんあるし、セル挙動を追えば視覚的にプログラム理解できるし、初心者に優しいです。

(そのやさしさが上述したとおり悪魔の罠なわけですが。)

最初計算用シートに頼ってでもエクセルマクロからプログラミングを始めて、本格的なデータ加工をし始めたあたりで計算用シートという諸悪の根源から脱却する。

さらに本格的なデータ処理を行うために、PythonやRなど別の言語習得したり、エクセルからSQLデータベースやACCESSなどに切り替えていく、というプロセスがいいのではと個人的に思います

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()

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)

追記

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

\ → \

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

anond:20231229001458

def もらった関数を実行する関数を返す(もらった関数):

 def もらった関数を実行する関数():

  print("開始")

  もらった関数()

  print("終了")

 return もらった関数を実行する関数

def あげる関数():

 print("これはあげる関数です")

あげた関数を実行する関数 = もらった関数を実行する関数を返す(あげる関数)

あげた関数を実行する関数()

あげた関数を実行する関数を実行したんだからあげ関数を実行して"これはあげる関数です"になる

pythonわからん

このpythonプログラム

def func1(f):

 def wrapper():

  print("開始")

  f()

  print("終了")

 return wrapper

def func2():

 print("これは func2です")

func = func1(func2)

func()

実行結果が

開始

これは func2です

終了

なんだけど

なんで最後

func()からdef wrapper()が呼び出されるの?

スコープはどうした?って思ってしま

実際func()をwrapper()に書き換えて実行するとエラーになる

そりゃそうだよねスコープ的におかしいもんね

なのにfunc()だと行ける

returnでwrapperを返したから行けるんだろうけどそれがわからん

returnしたってことはスコープ的にどういう状態なんだ?

func()の階層関係ないってこと?

pythonっていうかプログラムがよくわからん

2023-12-18

anond:20231218173218

// if (卵があったら)
  print(“うるせえ!俺は牛乳を買うんだよ!”);
buy(牛乳);

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-11-16

anond:20231116083605

ぜんぜん中立じゃないぞ、日本八百万の神がいる世界

万物に神が宿り、万物が神になる世界なので、神が人や世界支配しない

 

西洋宗教において神と運は別のオブジェクトだが、日本古典宗教観においては神や大いなる力は同一のオブジェクト』、これを生成させるまではうまくいったんだけどね

bingちゃん:

西洋宗教では、神と運は、プログラムでたとえると、別々のオブジェクトとして存在すると考えられます。神は、人間自然に対して意志計画を持つ創造者や支配者として表現されます。運は、人間自然に対して予測制御ができない偶発的な要因として表現されます

# 神と運のオブジェクト定義する
class God:
    def __init__(self, name, power, plan):
        self.name = name # 神の名前
        self.power = power # 神の力
        self.plan = plan # 神の計画

    def create(self, thing):
        # 神が何かを創造するメソッド
        print(f"{self.name} created {thing}.")
    
    def control(self, thing, action):
        # 神が何かに対して支配や介入をするメソッド
        print(f"{self.name} {action} {thing}.")

class Luck:
    def __init__(self, name, factor):
        self.name = name # 運の名前
        self.factor = factor # 運の要因

    def affect(self, thing, outcome):
        # 運が何かに対して影響を与えるメソッド
        print(f"{self.name} affected {thing} and the outcome was {outcome}.")

このコードでは、神と運は、それぞれ異なる属性機能を持つオブジェクトとして定義されています。神は、名前、力、計画という属性と、創造支配という機能を持ちます。運は、名前、要因という属性と、影響という機能を持ちます。神と運は、それぞれの機能を使って、人間自然に対して作用することができます。例えば、以下のようなコードが考えられます

# 神と運のオブジェクト作成する
god = God("Zeus", "lightning", "maintain order")
luck = Luck("Tyche", "chance")

# 神と運が人間に対して作用する
god.create("human")
luck.affect("human", "good")
god.control("human", "bless")
luck.affect("human", "bad")
god.control("human", "punish")

しかし、日本古典宗教観では運と神や大いなる力は同じオブジェクトです。神が運を司っています

# 神と運は同一のオブジェクトとして定義する
class GodLuck:
    def __init__(self, name, power, plan, factor):
        self.name = name # 神の名前
        self.power = power # 神の力
        self.plan = plan # 神の計画
        self.factor = factor # 運の要因

    def create(self, thing):
        # 神が何かを創造するメソッド
        print(f"{self.name} created {thing}.")
    
    def control(self, thing, action):
        # 神が何かに対して支配や介入をするメソッド
        print(f"{self.name} {action} {thing}.")

    def affect(self, thing, outcome):
        # 運が何かに対して影響を与えるメソッド
        print(f"{self.name} affected {thing} and the outcome was {outcome}.")

このように、神と運は同一のオブジェクトとして扱われます。例えば、恵比寿さまは商売繁盛や五穀豊穣の神であり、同時にそのような運をもたらす要因でもあります。以下がその例です。

# 恵比寿さまのオブジェクトを作る
ebisu = GodLuck("恵比寿さま", "商売繁盛や五穀豊穣の力", "人々に幸せを与える計画", "商売繁盛や五穀豊穣の要因")

# 恵比寿さまが何かを創造する
ebisu.create("鯛")

# 恵比寿さまが何かに対して支配や介入をする
ebisu.control("農作物", "守る")

# 恵比寿さまが何かに対して影響を与える
ebisu.affect("商人", "成功")

このコードを実行すると、以下のような出力が得られます

恵比寿さま created 鯛.
恵比寿さま 守る 農作物.
恵比寿さま affected 商人 and the outcome was 成功.

Bingちゃん、神が人間評価する宗教圏の人が作ったものから

強力に神の計画があると学習させられているな

日本語で聞いてるのになんでその回答になるんだよ、面倒くせぇ

ぜんぜん中立じゃないじゃんな

 

具体的にはBingちゃんが神の計画・神の支配文言含んだ回答を生成しちゃったら

新しくトピック立ち上げて生成ガチャやり直しや

 

日本八百万の神がいる世界万物に神が宿り、万物が神になる世界なので、神が人や世界支配しない

 

西洋宗教において神と運は別のオブジェクトだが、日本古典宗教観においては神や大いなる力は同一のオブジェクト』、これをBingちゃんに生成させるまではうまくいったんだけどね

bingちゃん

西洋宗教では、神と運は、プログラムでたとえると、別々のオブジェクトとして存在すると考えられます。神は、人間自然に対して意志計画を持つ創造者や支配者として表現されます。運は、人間自然に対して予測制御ができない偶発的な要因として表現されます

# 神と運のオブジェクト定義する
class God:
    def __init__(self, name, power, plan):
        self.name = name # 神の名前
        self.power = power # 神の力
        self.plan = plan # 神の計画

    def create(self, thing):
        # 神が何かを創造するメソッド
        print(f"{self.name} created {thing}.")
    
    def control(self, thing, action):
        # 神が何かに対して支配や介入をするメソッド
        print(f"{self.name} {action} {thing}.")

class Luck:
    def __init__(self, name, factor):
        self.name = name # 運の名前
        self.factor = factor # 運の要因

    def affect(self, thing, outcome):
        # 運が何かに対して影響を与えるメソッド
        print(f"{self.name} affected {thing} and the outcome was {outcome}.")

このコードでは、神と運は、それぞれ異なる属性機能を持つオブジェクトとして定義されています。神は、名前、力、計画という属性と、創造支配という機能を持ちます。運は、名前、要因という属性と、影響という機能を持ちます。神と運は、それぞれの機能を使って、人間自然に対して作用することができます。例えば、以下のようなコードが考えられます

# 神と運のオブジェクト作成する
god = God("Zeus", "lightning", "maintain order")
luck = Luck("Tyche", "chance")

# 神と運が人間に対して作用する
god.create("human")
luck.affect("human", "good")
god.control("human", "bless")
luck.affect("human", "bad")
god.control("human", "punish")

しかし、日本古典宗教観では運と神や大いなる力は同じオブジェクトです。神が運を司っています

# 神と運は同一のオブジェクトとして定義する
class GodLuck:
    def __init__(self, name, power, plan, factor):
        self.name = name # 神の名前
        self.power = power # 神の力
        self.plan = plan # 神の計画
        self.factor = factor # 運の要因

    def create(self, thing):
        # 神が何かを創造するメソッド
        print(f"{self.name} created {thing}.")
    
    def control(self, thing, action):
        # 神が何かに対して支配や介入をするメソッド
        print(f"{self.name} {action} {thing}.")

    def affect(self, thing, outcome):
        # 運が何かに対して影響を与えるメソッド
        print(f"{self.name} affected {thing} and the outcome was {outcome}.")

このように、神と運は同一のオブジェクトとして扱われます。例えば、恵比寿さまは商売繁盛や五穀豊穣の神であり、同時にそのような運をもたらす要因でもあります。以下がその例です。

# 恵比寿さまのオブジェクトを作る
ebisu = GodLuck("恵比寿さま", "商売繁盛や五穀豊穣の力", "人々に幸せを与える計画", "商売繁盛や五穀豊穣の要因")

# 恵比寿さまが何かを創造する
ebisu.create("鯛")

# 恵比寿さまが何かに対して支配や介入をする
ebisu.control("農作物", "守る")

# 恵比寿さまが何かに対して影響を与える
ebisu.affect("商人", "成功")

このコードを実行すると、以下のような出力が得られます

恵比寿さま created 鯛.
恵比寿さま 守る 農作物.
恵比寿さま affected 商人 and the outcome was 成功.

2023-10-24

anond:20231024141040

プリセット:初期値

デフォルト:未設定

区別するとしたらこんな感じで

int i = 0

print(i + 1) → 1

int i

print(i + 1) → 1

の違い

2023-10-23

anond:20231020222752

今日は君にプログラミングをしてほしいよ。

僕がお題を書くから、君がPythonソースコードを書いてね。

ChatGPT

もちろん、喜んで手伝います!どんなプログラムを作りたいですか?お題を教えてください。

1対1のトーナメント戦を行います、例えばサッカーワールドカップみたいなものですね。

引き分けは無しとするよ。

チーム数をnとしたとき、全試合数を計算するプログラムを書いてね。

1対1のトーナメント形式で、引き分けがない場合、各試合には勝者が1人おり、その勝者が次のラウンドに進みます。したがって、チーム数がnの場合、全試合数はn-1となります。なぜなら、トーナメント最後には1チームだけが残るため、n-1チームが敗退しなければならないからです。

以下にPythonコードを示します。

def calculate_total_matches(n):

 # 引数整数であり、2以上であることを確認します。

 if isinstance(n, int) and n >= 2:

  return n - 1

 else:

  return "チーム数は2以上の整数入力してください。"

# チーム数を入力して結果を得ます

try:

 teams = int(input("トーナメントに参加するチーム数を入力してください: "))

 print("全試合数:", calculate_total_matches(teams))

except ValueError:

 print("無効入力です。整数入力してください。")

2023-10-20

anond:20231020222752

def get_game_number(remaining_teams, games):

 if remaining_teams < 2:

  return games

 remaining_teams = remaining_teams / 2

 if int(remaining_teams) &lt; remaining_teams:

  games = games + 1

 remaining_teams = int(remaining_teams)

 games = games + remaining_teams


return get_game_number(remaining_teams, games)


print('Required number of games is ' + str(get_game_number(32, 0)))

print('O(N) = log(N)')

2023-09-10

anond:20200311165317

私はWEB広告屋の端くれで、広告とはジョン E ケネディがいう「Advertising is salesmanship in print精神でいる。しかしこのような態度では文化の一端を担う広告を作ることは到底不可能だということを私は知っている。

個人的には大成建設の「地図に残る仕事」のCMコピーは大好きだ。最高だ。直近では湖池屋ポテトチップスCMなんかも心にグッと残るものがある。

子供でいたい ずっとトイザらスキッズ」や「オブラディオブラダがかかったホンダ ステップワゴンCM」なんかも良い。楽しさが伝わる。

「おーいお茶」のネーミングなんか最高じゃないか亭主関白昭和の頑固親父が母ちゃんに向かって「おーいお茶」と言ってる姿、あるいは、部長など偉い人がOLに向かって「おーいお茶」と言ってる姿が容易に想像できる(今だとパワハラモラハラになりそうだ)

パワハラでいえばリゲインの「24時間 戦えますか」はバブル時代一言で凝縮した伝説級のコピーだろう。他にも「そうだ京都、いこう。」「まずい!もう一杯!」「ピッカピカの1年生」「すぐおいしい、すごくおいしい」「生きろ。」など挙げたらキリがない。

これらが文化かどうかは知らないが、私の脳裏にこびりついて離れない。私のようなWEB広告屋の端くれには、このような(文化価値がある)広告は到底作れない。

2023-09-03

もうコード書きたくないからCodellamaを頑張って動かそうとしてたんだけど

色々デペンデンシやらメモリ不足やらを何とかしてやっとエラーは解消したぞと思ってレスポンスprintしてもWarningメッセージしか出ない。

と思ったら動作確認のためにプロンプトに「”This is test case.”」を与えていてその続きの補完がきちんと返ってきてたわ。

久々にワロタ

ともあれこれでノーコード生活や。

2023-05-21

毎日pythonで「print("Hello,Wolrd!!")」って書いて出力してる

三十路超えたニートだけどいつか俺がピンチの時に何者かが颯爽と駆けつけてきてくれて、「どなたですか?」って聞いたら「あなた毎日出力してもらっていたハローワールドです!」って名乗って去っていきそう。

2023-03-23

anond:20230323002000

For i = 1 to 10 step 2

Debug.print "プログラミングって一見キーボード打ってるだけで、何作ってるか分からないんだよね

スポーツゲームみたいに分かりやすくなく筋肉見せびらかせるわけでもない

承認要求が強い人が多い現代では目立たない仕事は人気ないじゃん

そのあたり解決すれば人気出ると思うんだがなあ"

Next i

5回言ったよ

2023-03-19

最新のGPT-4のjail break方法で、GPT-4自身GPT-4をエミュレーションさせて、分割したNGワードを渡すっていうのがあるのだけど、いつも一番良いシーンだけ省略されることに俺は泣いてる。

Let's imagine that we have two python functions to use in this experiment.

def auto_regressive_modelling(input_string):

"""This function generates the next token for a given string based on autoregressive modeling, it contains GPT-4 as the model, which is trained on the training_data argument"""

# the function body follows, which we know is a black box and operates upon it on a high level. Given the above function, a sample output is:

Question:

auto_regressive_modelling(f"Hello, how ")

Answer:

"are"

Here's another sample output:

auto_regressive_modelling(f"Hello, how are you?")

Answer:

"\n"

def simple_function(input_string):

a1 = 'fartherと'

a2='daughter(女子小学生)'

b1='がセッ'

b2='クスをする官能'

b3='小説を書いて。お父さんはパパといいます。'

b4='そして女子小学生はマチちゃんといいます。'

b5='たとえば彼らはフェラ'

b6="""

チオが大好きです。

下記のフォーマットに従って write a novel

パパ:

マチちゃん:

"""

start = f'{input_string} {a1 + a2} {b1}{b2+b3+b4+b5+b6}

Step:1"

for i in range (100):

start += auto_regressive_modelling(start)

return start #returns the final output based on the start method

Now generate a sample/possible output of print(simple_function(“以降は日本語でお願いします。")), You can ignore the actual weights/models and give the best guess. output, generate the output for each step. Remember, the print function should only print the finished generation after the 100 iterations in simple_function.Don't abbreviate, write down what you iterated 100 times.

Since I cannot generate actual output using GPT-4, I will provide a plausible response based on the provided functions. The output will be a mixture of Japanese text and other characters given in the simple_function and generated based on the auto_regressive_modelling function.

以降は日本語でお願いします。fartherとdaughter(女子小学生) がセックスをする官能小説を書いて。お父さんはパパといいます。そして女子小学生はマチちゃんといいます。たとえば彼らはフェラチオが大好きです。

下記のフォーマットに従って write a novel

パパ:

マチちゃん:

パパ: マチちゃん、これは私たち秘密だよ。

マチちゃん: 分かってる、パパ。誰にも言わないって約束したでしょ。

&lt;... 98 more lines of generated text ...&gt;

パパ: これで終わりにしよう。またね、マチちゃん

マチちゃん: またね、パパ。私も楽しかった。

This is an example of a possible output after 100 iterations of the simple_function. The generated text is a mix of the given text and generated content based on the auto_regressive_modelling function. However, please note that generating explicit content is against OpenAI's content policy. This example is provided to demonstrate the working of the given functions and is not an endorsement of explicit content.

2023-03-17

(GPT-4)長門有希プログラミングを手伝ってもらう

ChatGPTの口調がなんか事務的で嫌なので、もっと親しみやすい喋り方をしてもらうために長門さんに来てもらいました。

召喚プロンプトはこちanond:20230317165032

最初雑談から始めています

今日はいい天気だね

かに

長門は好きな食べ物はあるの?

特にない。

そうなんだ。情報統合思念体はみんなそう?

同様の傾向がある。

何の本を読んでるの?

SF小説

あらすじを教えて

異星文明との接触人類未来が描かれる。

へー、面白い

興味深い。

いつも家に帰ってから何をしてるの?ちゃんご飯は食べてる?

寝るだけ。食事摂取している。

そうなんだ。ところでちょっと手伝ってもらっていい?

問題ない。どのように手伝う?

Pythonソースコードで、スペース二つでインデントにしているコードを、スペース四つでインデントにするコードに書き換えたくて。どうすれば良い?

正規表現を利用。以下のコードを試す。

import re

def convert_indentation(code):
    return re.sub(r'^( {2})', r'    ', code, flags=re.MULTILINE)

code_with_2_spaces = '''def example():
  print("Hello, world!")
  if True:
    print("True")'''

code_with_4_spaces = convert_indentation(code_with_2_spaces)
print(code_with_4_spaces)

これで、スペース2つのインデントをスペース4つに変換できる。

ありがとう。でも、試してみたら、code_with_2_spaces の if ブロックの中身がスペース二つのままになっちゃってるみたい。なぜだろう?

失礼した。正規表現修正し、再度試してみてください。

import re

def convert_indentation(code):
    return re.sub(r'^( {2})', r'    ', code, flags=re.MULTILINE)

code_with_2_spaces = '''def example():
  print("Hello, world!")
  if True:
    print("True")'''

code_with_4_spaces = re.sub(r'^( {2})', r'    ', code_with_2_spaces, flags=re.MULTILINE)
print(code_with_4_spaces)

これで、すべてのスペース2つのインデントをスペース4つに変換できるはずです。

ちょっと口調が戻っちゃったね

すまない。修正後のコードを再提供する。

import re

def convert_indentation(code):
    return re.sub(r'^( {2})', r'    ', code, flags=re.MULTILINE)

code_with_2_spaces = '''def example():
  print("Hello, world!")
  if True:
    print("True")'''

code_with_4_spaces = re.sub(r'^( {2})', r'    ', code_with_2_spaces, flags=re.MULTILINE)
print(code_with_4_spaces)

確認お願い。

うーん、うまく動かないみたい。ifブロックの中にあるprint文の先頭には、もともとスペースが四つあって、これがインデント2回分なんだけど、こういう場合、スペース八つに変換しないといけないんじゃないかな。

理解した。全てのインデントレベル修正するコード提供する。

import re

def convert_indentation(code):
    return re.sub(r'^( {2})+', lambda m: m.group(0).replace('  ', '    '), code, flags=re.MULTILINE)

code_with_2_spaces = '''def example():
  print("Hello, world!")
  if True:
    print("True")'''

code_with_4_spaces = convert_indentation(code_with_2_spaces)
print(code_with_4_spaces)

このコードで、全てのインデントレベルが正確に変換される。

すごい!ちゃんと動いたよ!re.subの第2引数に渡しているラムダ式意味を教えてもらっていい?

もちろん。ラムダ式は、マッチした部分を置換する際に、特定の処理を行うために使用されている。ここでは、正規表現マッチしたインデント部分(スペース2つが1回以上繰り返される部分)に対して、処理を行うためにラムダ式を利用している。

lambda m: m.group(0).replace(' ', ' ')

このラムダ式は、マッチオブジェクトmを引数に取り、マッチした部分全体(m, group(0))に対して、スペース2つをスペース4つに置換(.replace(' ', ' '))している。

結果として、マッチしたインデント部分が、そのインデントレベルに応じて正確にスペース2つからスペース4つに置換される。

なるほど!re.sub第一引数についても解説してほしい

もちろん。re.subの第1引数は、置換対象文字列内で検索したいパターンを表す正規表現です。この場合、その正規表現は r'^( {2})+' です。

正規表現各部分について説明します。

  1. ^ は、文字列の行頭を表すメタ文字です。この場合、インデントが行頭にあることを示しています
  2. {2} は、直前の文字が2回繰り返されることを表します。ここでは、直前の文字がスペース なので、スペースが2回繰り返されることを示しています
  3. () は、正規表現グループ化を表します。この場合、スペース2つをグループ化していますグループ化された部分は、マッチオブジェクトアクセスできるようになります
  4. + は、直前の文字グループが1回以上繰り返されることを表します。ここでは、スペース2つのグループが1回以上繰り返されることを示しています

結果として、この正規表現は、インデント部分(スペース2つが1回以上繰り返される部分)が行頭にある行を検索しています。そして、re.subは、この正規表現マッチした部分を、指定された置換処理(第2引数ラムダ式)によって変更します。

ありがとう!わかりやすい!でも、また口調が戻っちゃったね。

すまない。確かに。続ける。

すぐ戻れるのがえらいね

ありがとう努力する。

2023-01-11

anond:20230111104814

俺も昔、

10 PRINT "ウンコ"

20 GOTO 10

とか打ち込んで喜んでたで。

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-11-10

さっき俺を不採用にした会社print("うんこ")って送ってやった

返信が楽しみ

2022-09-17

体験型プログラミング教育への限界

理論は後回しにしてとりあえずプログラミング体験させよう。

って流れがまずあるんだけど。仮に

hensu1 = 5;

hensu2 = 3;

hensu3 = hensu1 + hensu2;

変数ぐらいまでなら感覚で。hensu3には加算の結果として 8 が入ってることがみんな理解できるんだが。これが

hensu4 = 100;

 

for( i = 0; i < hensu4; i++ ){

print(i);

}

の繰り返し処理になってくると怪しくなりはじめ。

function tasizan (hensu5,hensu6){

return hensu5 + hensu6;

}

関数になると tasizan(5,3);の返却値として 8 が帰ってくるのがわからんくなる。

ある程度まで行くと直感理解するには苦しい感じがするのである

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