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

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

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

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

Q&A

解決済

2回答

517閲覧

atof関数の定義について

thino

総合スコア7

Python

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

0グッド

0クリップ

投稿2022/09/30 01:10

編集2022/09/30 01:37

前提

文字列aを浮動小数点に変換するatof関数を書きたいです。

実現したいこと

文字列sは符号や小数点があってもよく、整数部か少数部かどちらか一方が存在したり、しなかったりしても良いという条件をつけて行いたいです。
また、文字列メソッドと数値の四則演算で書きたいです。

発生している問題・エラーメッセージ

該当のソースコード

ソースコード

試したこと

import sys
def atof(a):
s=""

ここからの条件定義がわかりません

for s in sys.stdin:
print(atof(s))

補足情報(FW/ツールのバージョンなど)

Pythonでfloat(s)で変換できますが、自力で変換処理を書きたいです

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

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

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

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

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

can110

2022/09/30 01:13

Pythonではたんに「float(s)」で変換できますが、(課題などのため)自力で変換処理を書きたいということでしょうか?
thino

2022/09/30 01:16

そうです。float(s)と同じだと思うのですが、atofの違いなどわかりましたら合わせて教えていただきたいです、、。課題にはatofとのことだったのですが、、
y_waiwai

2022/09/30 01:23

質問は編集できます 無駄に質問建てないで追記修正しましょう
otn

2022/09/30 13:38

自力で書きたいと言いながら、丸投げの形で質問しているのは、どういうことなのでしょう?
thino

2022/10/02 09:54

初学者のため自分で考えてもなかなか思いつかず詰まってしまったため、回答例をお聞きしたく質問しました。
guest

回答2

0

atof 自作で検索すると実装コード例がいろいろ出てくるので参考になるかと思います。

投稿2022/09/30 01:20

can110

総合スコア38266

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

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

0

ベストアンサー

とりあえず、サンプルです。
[符号]、整数部の数字、[小数点、小数点以下の数字]の順に並んでいる想定です。[]内は省略可能
指数表記には対応していません。(1.23E5 等は対応していません)
変換時、エラーになった場合は、Noneを返します。

python

1import sys 2def char2int(c): 3 if c == '0': 4 return 0 5 if c == '1': 6 return 1 7 if c == '2': 8 return 2 9 if c == '3': 10 return 3 11 if c == '4': 12 return 4 13 if c == '5': 14 return 5 15 if c == '6': 16 return 6 17 if c == '7': 18 return 7 19 if c == '8': 20 return 8 21 if c == '9': 22 return 9 23 return None 24# atofの自作関数 25# 文字列は [S]NNN[.nnn] の形式であること 26# S :符号 + 又は - 27# NNN:1桁以上の数字であること 28# . :ピリオド(.)であること 29# nnn:1桁以上の数字であること 30# []内は省略可能 31def atof(a): 32 st = 0 # 0:符号待ち 1:数字待ち(小数点以上) 2:数字待ち(小数点以下) 33 sign = 1 # 符号 34 val = None 35 dval = None 36 under_digit = 1 37 #for c in range(len(a)): 38 for c in a: 39 if c == '\n': 40 break 41 #符号待ち 42 if st == 0: 43 st = 1 44 if c == '+': 45 pass 46 elif c == '-': 47 sign = -1 48 else: 49 n = char2int(c) 50 if n == None: 51 return None 52 val = n 53 # 数字待ち(小数点以上) 54 elif st == 1: 55 if c == '.': 56 if val == None: 57 return None 58 st = 2 59 else: 60 n = char2int(c) 61 if n == None: 62 return None 63 if val == None: 64 val = n 65 else: 66 val = val * 10 + n 67 # 数字待ち(小数点以下) 68 elif st == 2: 69 n = char2int(c) 70 if n == None: 71 return None 72 if dval == None: 73 dval = n 74 else: 75 dval = dval * 10 + n 76 under_digit *= 10 77 78 if val == None: 79 return None 80 if dval == None: 81 retval = val 82 else: 83 retval = val + dval / under_digit 84 retval *= sign 85 return retval 86 87for s in sys.stdin: 88 print(atof(s)) 89

実行結果
12.34
12.34
+12.3
12.3
-12.6
-12.6
-0.1234
-0.1234
+0.1234
0.1234
aaa
None

投稿2022/10/01 07:10

tatsu99

総合スコア5438

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

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

thino

2022/10/02 09:56

ありがとうございます。どのような構成でコードを書いていますか?初学者のためコードをうまく考えることが難しく自分で考えてもエラーばっかりで、、参考にさせていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問