質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1323閲覧

コードをもっと短縮できないか。またこのコードに抜け目はないか。

python.beginner

総合スコア6

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/08/30 09:57

pythonで与えられた1~99までの数を英語表記の文字列として返す関数の作成をしています。
完成は一応したのですが、自分が学んだ範囲で作ったので本来ならもっと簡略化できるのではないかと思いました。

該当のソースコード

python

def num_to_str(n): num = ['one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen'] if n <= 13: return num[n-1] else: if 14 <= n <= 19: if n == 15: return 'fifteen' if n == 18: return 'eighteen' return num[n-11]+'teen' if n == 20 or 30 or 40 or 50 or 60 or 70 or 80 or 90: t = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninty'] if n % 10 != 0: return t[int((n//10)-2)]+' '+num[((n%10)-1)] else: return t[int((n/10)-2)] ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

python.beginner

2019/08/30 10:44

具体的にどのような内容に修正すればいいのでしょうか。teratailを始めてまだ1日もたっていません、どこまでが丸投げなのか、丸投げでないのか基準がイマイチわかりません。自分なりに丸投げでないことを意識して質問したのですが....。よろしければ今後の改善のために教えていただけますでしょうか。
gentaro

2019/08/30 10:54

「思いました」という文章と共にコードだけ貼られているところがおかしいと思いました。(それは感想であって質問ですらない) どの部分が冗長だと思ってるかの説明や、自分が調べた範囲でどういう改善案があるのかも書いておらず、ただコードを出して「最適化してくれ」と投げているように見えます。
python.beginner

2019/08/30 11:06

>>>「思いました」という文章と共にコードだけ貼られ... 確かにこれは感想ですね。修正するとともに以後気を付けます。 >>>どの部分が冗長だと思ってるかの説明や、自分が調べた範囲... 見出しにもある通り、修正の余地はあるのかを聞いているのであって最適化したコードは求めていません。またどこが冗長であるかがわからないから質問させていただいたので、改善案を書くことはできないです(__)
python.beginner

2019/08/30 11:28 編集

了解しました。ちなみに「この問題はこれで合っていますか」みたいなのも丸投げですか?
gentaro

2019/08/30 12:53

ケースバイケースです。質問した事情に納得のいく説明があれば丸投げとは思いません。 十分調査された上で理解が難しいと感じた問題について解釈として合ってるのか、というのは別に良いんじゃないですか。 ただ、ある機能を実装するためのコードを出して「これであってますか?」という質問は丸投げでしょうね。 テストをやるのはプログラマの責任なんで。(あってるかどうかぐらいは自分で確認するべき)
guest

回答3

0

乗り遅れましたが、一応書いたので埋めておきます。

python

1def num_to_str2(n): 2 num = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 3 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'] 4 t = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'] 5 return num[n] if n < len(num) else ' '.join([t[n // 10], num[n % 10]]).rstrip()

投稿2019/08/30 11:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

python.beginner

2019/08/30 12:04

ありがとうございます! 初心者なのでreturnのところにifが来てる時点で !?ってなりました(笑)
guest

0

コードゴルフ的な何かかな?それとも大喜利コーナー?

Python

1def num_to_str(n): 2 l = [''] + 'one two three four five six seven eight nine ten eleven twelve thirteen'.split() 3 l[14:] = [f'{x}teen' for x in l[4:10]] 4 l[15:19:3] = [f'{x}teen'for x in ['fif', 'eigh']] 5 for x in 'twenty thirty forty fifty sixty seventy eighty ninty'.split(): 6 l[len(l):] = [x] + [f'{x} {y}' for y in l[1:10]] 7 return l[n] 8 9for n in range(1, 100): 10 print('%d = %s' % (n, num_to_str(n)))

投稿2019/08/30 11:21

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

python.beginner

2019/08/30 11:26

.ありがとうございます(__) >>>コードゴルフ的な何かかな?それとも大喜利コーナー? どゆことですか?
raccy

2019/08/30 12:32 編集

コードゴルフ: 与えられた問題に対して、コードをいかに短く書くかという競技の一つ。 大喜利: コードだけを求める質問に淡々とコードだけの回答を書いていくという、回答者同士のみで争う競技の一つ。某スレだけの用語なので一般的では無い。
python.beginner

2019/08/30 12:49

コードゴルフ面白そうですね( ..)φメモメモ
guest

0

ベストアンサー

条件分岐は 20 以上と未満だけで良いと思うよ。

コード書いた人がいるんで追記w

python

1def num_to_str(n): 2 num = ['','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen'] 3 t = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninty'] 4 if n < 20 : return num[n] 5 else : return t[(n//10)-2] + (" ","")[n%10==0] + num[((n%10))] 6 7for i in range(1,100): 8 print(str(i) + " : " + num_to_str(i))

投稿2019/08/30 10:44

編集2019/08/30 11:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

python.beginner

2019/08/30 10:50

20,30...と羅列しているところですかですよね。了解しました。 ...参考までに聞かせていただきたいのですが:「nは◯と△と☓の時成り立つ」というのorを使ったこの書き方で大丈夫ですか?
退会済みユーザー

退会済みユーザー

2019/08/30 10:59

>「nは◯と△と☓の時成り立つ」というのorを使ったこの書き方で大丈夫ですか? 試してみるとイイですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問