Kata W 2 D 1-ローマ字to数字(feat.再包装)
具本旭と一緒に問題を解いた
これは考えるべき内容だ.
論理的な「ナビゲータ」を言語で説明し、
本旭はコードを書く「運転手」を演じた
最初に作成したプール計画は次のとおりです.で与えられた文字列sをチェックします. Symbolで、Valueに最大文字列があるかどうかを確認します.
2-1. ない場合は、Valueに大きな文字列があるかどうかを繰り返しチェックします. を計算した後、計算した文字列を削除します.
3-1. 見つかった文字列が1番目の場合、0番目の文字の値を答えから減算し、1番目の文字を追加します.
3-2. 見つかった文字列が0番目の場合は、0番目の文字の値を追加します.
(*最初の文字列の値が最大の場合は )
2つのリストを共通インデックス(数値)として使用します. にはrom listもあります.index()の繰り返しも見たくありません.
rom_list.index()のネスト方法は関数に分けられる.
どうせチェックする部分はs[1]とs[0]だけなので、2つの部分だけを比較するようにコードを変更しました.
(*いずれにしても最大値の文字列は0または1のみ)
この過程で、2つの配列が共に使用するインデックスjを排除することができる.
2-1. ただs[1]をずっと呼び出していたので、sがないのを防ぐため[1]
最初は長さをチェックしていましたが、s[1]がなければ終了関数を返します.
でも….は依然として2つのリストを使用しています.
コードでは、配列を使用する方法はrom->numの一方向です.
タイルを使用する必要はありません.
次はBonUkが並べ替えをキャンセルする方向に再包装した結果です
関数は正常に削除されました.
新しく宣言された変数/オブジェクトにはディックシーケンスが1つしかありません.
最初からクリーンなコードを作成したい場合は、より多くの時間や労力が必要ない場合があります.
しかし、接着剤がコードを形成すると、表示しにくい部分が見つかり、減少します.
時間的に聞くのはずっと少ない.
二人が交代でコードを交換する初めての体験.
ブログにコメントします.
これは考えるべき内容だ.
1.質問
2.初期計画
論理的な「ナビゲータ」を言語で説明し、
本旭はコードを書く「運転手」を演じた
最初に作成したプール計画は次のとおりです.
2-1. ない場合は、Valueに大きな文字列があるかどうかを繰り返しチェックします.
3-1. 見つかった文字列が1番目の場合、0番目の文字の値を答えから減算し、1番目の文字を追加します.
3-2. 見つかった文字列が0番目の場合は、0番目の文字の値を追加します.
(*最初の文字列の値が最大の場合は
def roman_to_num(s):
# 여기에 코드를 작성해주세요.
rom_list = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
numbers = [1000, 500, 100, 50, 10, 5, 1]
answer = 0
j = 0
while s:
i = rom_list[j]
if i in s:
if s.index(i) == 1:
idx0 = rom_list.index(s[0])
idx1 = rom_list.index(s[1])
answer += -numbers[idx0] + numbers[idx1]
s = s[2:]
else:
idx = rom_list.index(s[0])
answer += numbers[idx]
s = s[1:]
elif not i in s :
j += 1
return answer
最初のコード.解決したけど...2つの
3.マスター再構築-冗長メソッド関数に変換し、共通インデックスを削除
rom_list.index()のネスト方法は関数に分けられる.
どうせチェックする部分はs[1]とs[0]だけなので、2つの部分だけを比較するようにコードを変更しました.
(*いずれにしても最大値の文字列は0または1のみ)
この過程で、2つの配列が共に使用するインデックスjを排除することができる.
2-1. ただs[1]をずっと呼び出していたので、sがないのを防ぐため[1]
最初は長さをチェックしていましたが、s[1]がなければ終了関数を返します.
def roman_to_num(s):
# 여기에 코드를 작성해주세요.
rom_list = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
answer = 0
while s:
if len(s) == 1 :
answer += rom_value(s[0])
return answer
if rom_list.index(s[1]) < rom_list.index(s[0]) :
answer += rom_value(s[1]) - rom_value(s[0])
s = s[2:]
else :
answer += rom_value(s[0])
s = s[1:]
return answer
def rom_value(string) :
rom_list = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
num_list = [1000, 500, 100, 50, 10, 5, 1]
return num_list[rom_list.index(string)]
最初のコードに比べて簡潔になりました.でも….
コードでは、配列を使用する方法はrom->numの一方向です.
タイルを使用する必要はありません.
4.二次再構成-配列ではなくdictを使用
次はBonUkが並べ替えをキャンセルする方向に再包装した結果です
def roman_to_num(s):
# 여기에 코드를 작성해주세요.
rom_num = {'M' : 1000, 'D' : 500, 'C' : 100, 'L' : 50, 'X' : 10, 'V' : 5, 'I' : 1}
answer = 0
while s:
if len(s) == 1:
answer += rom_num[s[0]]
return answer
if rom_num[s[0]] < rom_num[s[1]]:
answer += rom_num[s[1]] - rom_num[s[0]]
s = s[2:]
else:
answer += rom_num[s[0]]
s = s[1:]
return answer
和弦がずいぶんきれいになりました.関数は正常に削除されました.
新しく宣言された変数/オブジェクトにはディックシーケンスが1つしかありません.
最初からクリーンなコードを作成したい場合は、より多くの時間や労力が必要ない場合があります.
しかし、接着剤がコードを形成すると、表示しにくい部分が見つかり、減少します.
時間的に聞くのはずっと少ない.
二人が交代でコードを交換する初めての体験.
ブログにコメントします.
Reference
この問題について(Kata W 2 D 1-ローマ字to数字(feat.再包装)), 我々は、より多くの情報をここで見つけました https://velog.io/@nzlk112/코드카타-W2D1-로마자-to-숫자-feat.리팩토링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol