Startup Data scientist Blog

データ分析系のテック情報を発信します

pythonを使ったFizzBuzz問題の攻略

コーディング面接でよくある質問であるFizzBuzz問題のプログラムを作成する

 

・1-100までの数字を出力するプログラムを書きなさい。

ただし、3の倍数の時は数字の代わりに'Fizz'と出力し、

5の倍数の時には数字の代わりに'Buzz'と出力する。

3と5の倍数の時には、'FizzBuzz'と出力するプログラムを記述しなさい。

 

※3の倍数か5の倍数かの判定は余剰計算(%)で求めることが出来ます。

割り切れる場合は0になるのでそれに注意して条件設定を行っていきます。

for i in range(1, 101):
    # 3 and 5の倍数の時
    if i % 3 == 0 and i % 5 ==0:
        print('FizzBuzzz')
    #3の倍数の時
    elif i % 3 == 0:
        print('Fizz')
    #5の倍数の時
    elif i % 5 == 0:
        print('Buzz')
    else:
        print(i)

>>>

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

 

 

FizzBuzz問題を関数化する

今度はFizzBuzz問題を関数化させていきます。defを使うことで関数化させることが出来ます。Forを使い1から20までの数字をループさせ、FizzBuzzで表示させていきます。

 

def fizzbuzz():
    for i in range(0, 21):
        if i % 3 == 0 and i % 5 == 0:
            print('FizzBuzz')
        elif i % 3 == 0:
            print('Fizz')
        elif i % 5 == 0:
            print('Buzz')
        else:
            print(i)
    return
       
number = fizzbuzz()
print(number)

>>>

FizzBuzz
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
None

 

 

どのようにしてデザインツールFigmaは大きくなったのか

Figmaとは

ブラウザベースのコラボレーション・インターフェース・デザイン・ツールである。MacOSまたはWindows用のデスクトップアプリケーションでオフラインでも利用できる。

 

www.figma.com

 

 

consumerstartups.substack.com

 

和訳---

Figmaは2016年に正式ローンチして以来、指数関数的な成長を続け、昨年には評価額100Bドルに到達しました。

Figmaは厳密にはB2B SaaS企業ですが、それでも消費者向けスタートアップに似た多くの特徴を持っています。特に、コミュニティを重視する企業であり、そのコミュニティのユーザーとの信頼と確実な関係によって成長エンジンを構築しています。この製品の熱心なファンとして、Figma が、この世代で最も伝説的な企業の 1 つに成長するまでのストーリーを紹介できることを嬉しく思っています。

この投稿では、次のことを説明します。

 

 

ディラン・フィールドの生い立ち

Figma の背後にあるユニークな洞察

Figma差別化戦略

Figma のコミュニティ主導の成長フレームワーク 

ディラン・フィールド、シリアル・インターン
Figma を共同設立する前、ディラン・フィールドは、「シリアル・インターン」でした。

 

 

・高校3年生。オライリー・メディアでジェネラリストインターン

・高校卒業後の夏 インディネロでエンジニアインターン

・大学1年 マイクロソフトでのリサーチインターン

・大学1年生の夏 LinkedInでのデータインターン

・大学2年生の夏 Flipboardでのエンジニアリング・インターン

・大学3年次 Flipboardでデザインインターン

 

Flipboardでの最後のインターンの後、大学(ブラウン大学)を中退し、Thielフェローシップからの10万ドルの援助を受けて、起業の夢を追い求める。

簡略化すると、DylanはFlipboardで使っていたデザインツールに不満があったので、ブラウザでGoogle Docのように使えるクラウドファーストのデザインツールを作ろうと思ったということです。しかし、正確にはこれが全てではありません。

Thiel Fellowshipに応募した時点で、Dylanは交通を監視して無謀なドライバーを捕まえるためのドローン用の優れたソフトウェアを作って、世界を変えたいと考えていました。

"私はUAVのためのより良いソフトウェアを作成することによって世界を変えるつもりです。Flipboardを卒業したら、知り合いの最も賢いプログラマーと共同で会社を設立し、この問題に取り組むつもりです。それまでの間、私はUAVの領域についてできる限り学び、ROS(http://www.ros.org/wiki/)をローエンドのドローンに適応させています。

これはクレイジーなアイデアです。ティール財団と協力して実現させるのが楽しみです。" - ディラン・フィールド

このアイデアは、ハードウェアの開発サイクルや業界の規制が煩わしいこと、そして何より人を傷つけたりプライバシーを侵害したりしないドローンのアイデアが思いつかないことから、共同創業者のエヴァンにすぐに却下された。このThielフェローシップの応募については、こちらのLinkedInの投稿をご覧ください。

Figma の創世記
同じ頃、エヴァンは、WebGL が初めてリリースされた 2011 年初めに、その研究を大量に開始しました。WebGL は、開発者が Web ブラウザ上でリアルタイムのインタラクティブなアプリケーションを構築できるようにする新しい技術でした。たとえばエヴァンは、ブラウザ上で10種類の画像フィルターを使って写真を調整できる、画像フィルターツールを作りました。

 

エヴァンはディランにデモを見せると、たちまち虜になった。彼らは、この新しいWebGLの技術に全面的に取り組み、その上に製品を作ることにしました。

もうひとつユニークだったのは、ブラウザベースのクリエイティブツールには、クリエイティブツール業界全体、特にインターフェイスデザインを破壊するチャンスがあるということです。

当時は、InVisionやAdobeのクリエイティブツール群が業界を席巻していました。これらは、ほとんどがネイティブアプリケーションでした。デザイナーでない人がデザインファイルに飛び込んで、リアルタイムにコラボレーションするのは、それほど簡単なことではありませんでした。そこで、ブラウザ上にデザインソフトを構築すれば、デザインツールの複雑さを軽減し、リアルタイムのオンラインコラボレーションを容易に実現できるのではと考えたのです。以前は、そのような製品を作ることは技術的に不可能でしたが、WebGLによって、それがぎりぎり可能になったのです。

この賭けは大成功を収めました。Figmaは、ここ数年、急速な勢いで競合他社のシェアを奪っている。UX Toolsが2020年に行った調査によると、デザイナーの60%近くがFigmaを使用しており、わずか5年前の10%未満から大きく飛躍しています。

 

新規参入者が最先端技術を駆使して10倍優れた製品を生み出し、既存企業を駆逐するというストーリーは、これまでにも何度も繰り返されてきた。もう一つの例は、Uberである。モバイルアプリが普及し始めた頃に設立された彼らは、誰もが携帯電話のボタンをクリックするだけで車に乗れるモバイルインターフェイスを作り出し、従来のローテクなタクシー業界を破壊したのです。

 

Figmaの違い
製品レベルでは、Figmaは3つの重要な差別化要因を持っています。

高いアクセシビリティ 

マルチプレイヤー・モード

コミュニティ機能

 

1. 高いアクセシビリティ

Figmaは、アクセシビリティに優れているため、他のプラットフォームからの乗り換えコストを削減することができます。ユーザーは、デザイン経験の有無に関わらず、Figmaファイルに飛び込んで、プロトタイピングやワイヤーフレームを作成することができます。インターネットに接続できる環境であれば、どのブラウザからでもファイルにアクセスできるため、アプリをダウンロードする必要はありません。また、Figmaには無料版も用意されており、ユーザーはすぐにアップグレードするようプレッシャーを感じることなく、自分のペースでこのプラットフォームを試し続けることができます。

Figmaの高いアクセス性は、ファネルの上位を拡大し、できるだけ多くの人がこのプラットフォームの魔法を体験できるようにするものです。

 

2. マルチプレイヤー・モード

ディランによると、Figmaは、未来の仕事において、人々がコラボレーションし、つながるためのデジタル空間を構築しています。デザインプロセスは本質的にマルチプレーヤーのプロセスであり、Figmaはその領域で本当に繁栄しています。たとえば

ユーザーは、誰でも簡単にファイルに招待することができ、ワイヤーフレームに対して、まるでGoogle Docにコメントするように、コメントすることができます。

Zoomを使うことなく、ファイル内で直接他のユーザーと通話を開始することができます。

このマルチプレイヤー・モードでは、デザイナーだけでなく、プロダクト・マネージャー、エンジニア、エグゼクティブもFigmaを使っているので、粘着性が増します。設計チームの一員であるかどうかにかかわらず、誰もがこのプラットフォームから価値を得ているのです。

 

3. コミュニティ機能

Figmaの強力で情熱的なコミュニティが、今日これほどまでに大きくなった理由です(このトピックについては、次のセクションで掘り下げて説明します)。製品レベルでは、Figmaのユーザーがアプリ内でコミュニティから有用なデザインリソースを見つけられるよう、さまざまなコミュニティ機能を構築しています。

例えば、Figma Communityは、コミュニティによって作成されたテンプレート、ウィジェットプラグインの精選されたリストを持つページで、誰でも自分のデザインプロジェクトに活用することができます。これは、FigmaのDribbbleのようなものです。

これらの機能により、プラットフォームはよりソーシャルでユーザーにとって有益なものとなり、リテンションとエンゲージメントをさらに高めることができます。

 

コミュニティ主導の成長
現在、Figma のユーザー数は 400 万人を超えています。

素晴らしい製品に加え、Figma が驚異的な成長を遂げたのは、そのユニークなコミュニティ主導の成長戦略によるものです。Figma には、常に会社を絶賛し、Twitter、Medium、および substack (私が今日行っていること) で情報を広める、忠実なファンの広大なネットワークがあります。

今日の情熱的なFigmaのコミュニティは、突然現れたわけではありません。実際、何年にもわたるコミュニティの構築と関係性の育成の成果なのです。世界レベルの製品を持つことは確かに役立ちますが、それだけでは強いコミュニティを育てるには十分ではありません。

Figma の最高コミュニティ責任者であるアマンダ・クレハによると、Figma は、コミュニティ構築に 4 段階のアプローチを使用しました。

1.学び、探求する

2.学び、探求する

3.高める、増幅する

4.充実させ、繰り返す

 

ステップ1 - 学び、探求する。

プラットフォームの初期開発段階において。Figma チームは、まず、デザイン コミュニティで最も影響力のあるデザイナーを特定し、彼らに接触して、製品に関するフィードバックを得ました。彼らは、製品を構築するために最も重要な要素について、それらのインフルエンサーが何を考えているかに焦点を当て、フィードバックを記録していきました。

チームは、コミュニティのインフルエンサーでもあり、ポッドキャストも持っている社内のエバンジェリストも採用しました。このエバンジェリストは、Figmaの普及に貢献し、また多くのデザイナーの友人からフィードバックを集めました。

Figmaチームはまた、製品テストの経験をゲームにすることで、楽しいものにしようとしました。たとえば、「Pixel Poing」というゲームを作り、デザイナーを招いてライブストリームでくだらないものをデザインしてもらい、人々に見てもらうようにしました。

最初の段階では、製品を売ることではなく、コミュニティの人々に働きかけ、コミュニティと長期的な信頼を育むことができる人を見つけることが重要なのです。

 

ステップ 2 - 没頭し、耳を傾ける

製品が成熟すると、Figmaは、インフルエンサーというよりも、製品に情熱を持ち、スーパーユーザーとの連絡役となるデザイナーアドボケイトの採用も開始しました。

第2段階では、Figmaのもうひとつの焦点は、コミュニティのさまざまな場所にいるファンに会うことでした。ディランは、世界中を飛び回ってユーザーと直接会い、地元のエバンジェリストと協力して非公式のミートアップイベントを開催しました。IRLミートアップのほかにも、社内の多くの人がTwitterで積極的にファンと交流し、信頼関係を育み、持続的なつながりを作り出しています。

このフェーズでは、多様なユーザーの声に耳を傾け、彼らの声を聞いていると感じてもらえるよう、意図的に働きかけることが重要なのです。

 

ステップ 3 - 高め、増幅する

第3段階までに、Figmaは多くのユーザーを獲得し、驚異的な成長を遂げました。焦点は、コミュニティの価値を表す声を増幅し、ユーザー同士がつながる場を作ることでした。

そして、毎年開催されるカンファレンス「Config」の運営を開始し、ユーザーを招待して交流し、互いに学び合う場を提供しました。ユーザーは、自分の経験について話し、学びを共有する場が与えられました。

 

ステップ 4 - 充実させ、繰り返す

今日、Figmaには、多くの情熱的なローカル・コミュニティがあります。現在の焦点は、地域のエバンジェリストにリソースを提供することです。

彼らは、Friends of Figma というプラットフォームを構築し、地域の Figma コミュニティに参加したり、コミュニティを開始したりすることを容易にしました。


Figma は、長期的な関係構築と、本物のつながりを作ることに重点を置いているため、成功したコミュニティを構築しています。コミュニティをハックすることはできません。時間はかかりますが、その価値は十分にあります。

 

プログラミング入門書『独学プログラマー』の続編 独学コンピューターサイエンティスト Pythonで学ぶアルゴリズムとデータ構造

プログラミング入門書「独学プログラマー」独学コンピューターサイエンティスト Pythonで学ぶアルゴリズムとデータ構造

 

コーリー・アルソフの本は日本では有名だが、アメリカのサンフランシスコではあまり有名じゃないらしい。twitterのフォロワー数も3086人(2022年9月現在)などと非常に少ない。

 

アメリカではテックイベントや学習サービスが複数あるので当たり前といえば当たり前なのかもしれない。

 

ご本人のtwitter

twitter.com

 

 

 

Image

 

 

目次の一覧

web-cache.stream.ne.jp

 

xxstartupxxengineerxx.hateblo.jp

 

無料でコンピュータサイエンスを学ぶのであればこちらのハーバード大学の CS50xがおすすめです。

cs50.jp

 

 

pythonを使ったらサイコロProgram

ランダム関数を使ってサイコロを表現する

from random import randint

def main():
    counter = 0
    #サイコロを10回転がす
    while counter < 10:
        number = randint(1, 6)
        print("{0}回目のサイコロの目は{1}".format(counter+1, number))
        counter += 1
       
if __name__ == '__main__':
        main()

>>>

1回目のサイコロの目は4
2回目のサイコロの目は2
3回目のサイコロの目は2
4回目のサイコロの目は2
5回目のサイコロの目は5
6回目のサイコロの目は2
7回目のサイコロの目は4
8回目のサイコロの目は3
9回目のサイコロの目は6
10回目のサイコロの目は1

pythonでログを出力する

ログレベル

・DEBUG: logging.debug()

詳細情報、問題解析用

 

・INFO: logging.info()

各種イベント情報

 

・WARNING: logging.warning()

問題の報告

 

・ERROR: logging.error()

プログラムの何かしらの動作が失敗

 

・CRITICAL: logging.critical()

プログラム実行を中止する致命的なエラーの発生

 

 

loggingプログラム例:

from random import randint
import logging
logging.basicConfig(level=logging.DEBUG, format=" %(asctime)s - %(asctime)s -
%(levelname)s - %(message)s")

def main():
    counter = 0
    while counter < 10:
        number = randint(1, 13)
        print("{0}回目は{1}。".format(counter+1, number))
        logging.debug("counter={0}, numebr={1}".format(counter, number))
        counter += 1
       
    if __name__ == '__main__':
        logging.debug("Program start")
        main()
        logging.debug("Program end")

>>>

ログが表示されます。

 

ファイルに出力する場合のコード

from random import randint
import logging
 
#filename = 'use_loggingLog.txtを追加'
logging.basicConfig(filename ='use_loggiingLog.txt', level=logging.DEBUG,
format=" %(asctime)s - %(asctime)s - %(levelname)s - %(message)s")

def main():
    counter = 0
    while counter < 10:
        number = randint(1, 13)
        print("{0}回目は{1}。".format(counter+1, number))
        logging.debug("counter={0}, numebr={1}".format(counter, number))
        counter += 1
       
    if __name__ == '__main__':
        logging.debug("Program start")
        main()
        logging.debug("Program end")

 

 

おまけ

AttributeError: partially initialized module 'logging' has no attribute 'basicConfig' (most likely due to a circular import)とエラーが表示された。

 

ファイル名がlogging.pyであったため表示されたエラーであった。

モジュール内でloggingがつかわれているので使わない方が良い。

 

PythonでIPアドレスを取得するコード

 

import socket

#ローカルipアドレス
ip = socket.gethostbyname(socket.gethostname())
print(ip)

ip = socket.gethostbyname("www.enat.org")
print(ip)

>>

XXXX

XXXX

 

Pingコマンド

ping IPアドレス(123.111.1123のようなもの)で速度の表示

 

import pings

p = pings.Ping()
res = p.ping("www.enat.org")
if res.is_reached():
    #接続が出来た
    print("reached")
else:
    print("Not reached")

 

コンシューマー・ビジネスの立ち上げと拡大の方法

スタートアップの創業者は、不可能を可能にする必要があります。これまでにないものを、これまで一緒に仕事をしたことのないチームで、何十もの新しいスキルを学びながら、数え切れないほどの後戻りできない決断を下し、資金(とエネルギー)が尽きる前に作り上げなければならないのです。まるで、荒野で迷子になり、暗闇の中で、自分がどこに向かっているのか、漠然とした感覚しか持てないような状態です。

 

 

www.lennysnewsletter.com

 

 

和訳

その中身をご紹介します。

ステップ1:INSIGHT:アイデアを思いつく ←この記事

ステップ2:AUDIENCE(オーディエンス):超特殊な人を特定する

ステップ3:フック あなたのピッチを作成する

ステップ4:REACH。アーリーアダプターを見つける:スケールの小さいことをやってみる

ステップ5:RETAIN(維持):十分な人数が定着するまで繰り返す

 

すべてのスタートアップは少し壊れている

すべてのスタートアップは少し壊れているという記事の和訳

 

www.erezdruk.com

 

 

和訳---------------------------------------------------------------------------------------------

 

すべてのスタートアップは少し壊れている

現存するすべてのスタートアップは、複数の点で壊れています。自分のスタートアップについてそうでないと言う人は、妄想か、嘘か、あるいはその両方。


初期の頃、Paypalは毎週何千ものカスタマーサポートのリクエストを無視し、怒った顧客が山積みになっていた。顧客は会社の電話番号を発見し、24時間365日電話をかけ始めたとき、Paypalはそれを切断した。彼らは、顧客のことを大切に思っていたが、その時その時の火種に対応しきれなかったのだ。


最高のスタートアップは、往々にして、自分が混乱しているために、混乱しているように感じられる。この単純な事実、つまり、重要なものは常に壊れているという事実を受け入れることは、すべての優れた創業者が身につけるスキルであり、誰も生まれつきは持っていない。


壊れているものを受け入れる

あなたは、自分のスタートアップを2つの方法で見ることができます。

重要なものが壊れることを許されない完璧な創造物であること

重要なものが常に壊れている不完全な創造物としてのスタートアップ

前者は、多くの人が自分のスタートアップを思い描く方法であり、後者は、最高のリーダーが自分のスタートアップを運営する方法です。不完全なバージョンを支持する理由は3つあります。


最初の理由は、あなた自身の正気です。あなたのスタートアップが完璧で小さな宝石であると期待すればするほど、あなた自身を失望させることになる。重要なものは必ず壊れます。もしあなたが家に帰り、仕事以外の時間を充実させ、ぐっすり眠り、何十年も我慢したいと思うなら、バックグラウンドで火が燃えている間にそうしなければならないでしょう。


第二の理由は、あなたの部下です。完璧なスタートアップの経験を期待する(あるいは売り込まれる)従業員は、期待外れの結果に終わるだろう。スタートアップの旅には素晴らしいものがたくさんありますが、厄介なものであることは確かです。良いスタートアップの社員は、壊れているものを直すことに満足し、重要なことが壊れているのは旅の不可欠な部分であると理解しています。


3つ目の理由は、効果です。Paypalが膨大なサポート依頼を無視したのは、それが正しいことだったからです。あなたは、直すために物事を直すのではなく、進歩を最大化するために直すのです。最も重要なものを最初に修正し、それ以外のものは意識的に無視しなければならないのです。あるものは何年も壊れたままだ。永遠に壊れ続けるものもあります。


何を最初に直せばいいのか?

短い答えは、最も重要なもの、そしてそれのみです。もっと長い答えは、次のような方法論です。


この3つのバケツに入るもの以外は直さないことです。

 

  • 道徳:他人に損害を与えているもの、個人の価値観を損なうもの、明らかに法に触れるものは、すぐに修正する。

 

  • 人:社員が第一。社員のやる気をなくさせたり、不満を感じさせたり、非効率にさせるようなことは直さない。

 

  • 目標:現在の目標達成を阻害するものは、すべて優先させなければならない。

 

マーフィーの法則により、これらのバケツの中に直すべきものが多すぎることがよくあります。全部を一緒に直そうという誘惑に駆られないでください。感情を捨て、利益と努力の評価に基づき、順次進めていきましょう。

 


悲観せず、満足せず

 この考え方は、一見、悲観的に見えるかもしれませんが、全く逆です。これが単にスタートアップの性質であり、すべてのスタートアップは何らかの形で壊れており、歴史上最も成功したスタートアップも同じだったということを早く受け入れれば、あなたは解放されるでしょう。あなたは再び正気を取り戻し、より効果的な優先順位付けを行い、より良いリーダーになることができます。


さて、自己満足に陥らないようにしましょう。スタートアップの成功は、直すべきところをすべて直すこととは関係なく、正しいところを直すことにすべてがかかっているのです。重要なことに執着し、それ以外のことは意識的に手放す。


完璧を手放せ。壊れてもいいように。