2017-12-14 3 views
0

私のコードは、テストケースの一つの正しい番号を印刷していません - 「MCMXCVI」パイソン:intにローマ数字、「C」計算にヒッチハイク

をそれは印刷する必要があります:1996年 それは現在、2106年を印刷しています

最後のelif文で 'M'要素をチェックした後、 'C'要素の検証に失敗したと思われます。しかし、私はそれを正確に入力し、それがなぜあるのか分からない。どんな助けもありがとう!

編集:まだ分かりません。私はそれが "IV"と "MCM"で失敗していることを知っています - しかし、なぜですか?私はすべてを解析しているので、絶対に何かが欠けているはずです。私はいくつかのn00bを説明する必要がありますよ!

第2編集:入手しました!私は "IV"を素早く手で追っていました。私はV(5)を追加したのと同じように考えましたが、5 - 1(4)を追加する代わりにマイナス1 AFTERWARDSでした。だから私は5で終わるだろう。このロジックは他のものでも失敗している。前に要素の値をチェックしてから追加しなければなりません。皆さんありがとう!

class Solution: 
def romanToInt(self, roman): 
    """ 
    :type s: str 
    :rtype: int 
    """ 
    sum = 0 
    for element in range(0, len(roman)): 
     if roman[element] == 'I': 
      sum += 1 

     elif roman[element] == 'V': 
      sum += 5 
      if roman[element - 1] == 'I': 
       sum -= 1 

     elif roman[element] == 'X': 
      sum += 10 
      if roman[element - 1] == 'I': 
       sum -= 1 

     elif roman[element] == 'C': 
      sum += 100 
      if roman[element - 1] =='X': 
       sum -= 10 

     elif roman[element] == 'L': 
      sum += 50 
      if roman[element - 1] == 'X': 
       sum -= 10 

     elif roman[element] == 'D': 
      sum += 500 
      if roman[element - 1] == 'C': 
       sum -= 100 

     elif roman[element] == 'M': 
      sum += 1000 
      if roman[element - 1] == 'C': 
       sum -= 100 

    return sum 
+3

'MCM'の入力のための手でロジックを介して実行 - あなたはそれが間違っていていることがわかります。 –

+1

'IV'でも正しい結果が得られません。 – glibdud

+0

'class Solution'あなたはJavaの背景を持っていますか?真剣に、なぜクラスですか? – timgeb

答えて

1

Roman numbersの使用方法が普遍的に受け入れられていないためです。例えば。ウィキペディアから例えばMCMXMDCCCCXの両方は、あなたがそうであるように、あなたが各桁だけではなく、以前の1のすべてのマイナー番号を確認する必要があり1910表します。私が作ることができる

発言は以下のとおりです。

  • あなたは例えばXの両方IV減算を含める必要があります。そして、他のより大きな桁には、以前のすべての小さな数字も含まれます。それはそれはあなたが既に(で、前のステップで)一度これを追加しているので、あなたが値の2倍を引く必要がありますよう、あなたのコードを維持した場合
  • XVIなどを追加Lためです。例えば。 IV+ 1、+ 5、-1 = + 5ない+4として評価されます。あなたは+ 1、+ 5、を必要と-2 = + 5
  • あなたが最初の数字、すなわちelement=0上にあるかどうかをチェックする必要があり、その後element-1は別の意味(ある最後の桁)を持って、あなたはしたくありません見てみな。

たぶん、あなたのコードは、より多くのバグ修正を必要とするが、それは私が見つけたものです。

+0

あなたはちょうど来た。私は文字通り自分のコードを修正する過程にあった。私はバグ修正のあなたの助言を取るよ!ありがとうございました! – Travis

+1

[プロジェクトオイラー](https://projecteuler.net/about=roman_numerals)から有効と最小限のローマ数字の違いについて良い要約。私は2つの辞書の使用が私のコードを短縮したことを発見した。1つは加算のため、もう1つは減算ルールのためのものです。 – MrT

関連する問題