簡體   English   中英

當給定的輸入超過 2 位數字時,為什么我的代碼不起作用?

[英]Why does my code not work when the given input exceeds 2 digits?

romanD = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
oper = []
s = input('roman')
i = 0


class Solution(object):
    def romanToInt(self, s):
        rtype = int
        # for i in range(len(s)-1):
        for j in range(1, len(s)):
            i = 0
            if i >= len(s):
                break
            elif romanD[s[i]] < romanD[s[j]]:
                oper.append(-1 * romanD[s[i]])
            elif romanD[s[i]] >= romanD[s[j]]:
                oper.append(romanD[s[i]])
            i += 1
        oper.append(romanD[s[len(s) - 1]])
        return sum(oper)


b = Solution()
print(b.romanToInt(s))

我 go 一步步運行:

L 返回 50

LV 返回 55

LVI 返回 101

我不知道我哪里錯了。 出於某種原因,在 3 位數時,它會將第一個值相加兩次並忽略第二個值。

發生這種情況是因為i = 0for j in range()循環中,因此i將始終為0 要解決這個問題,只需將i = 0放在循環之前,如下所示:

def romanToInt(self, s):
        rtype = int
        # for i in range(len(s)-1):
        i = 0  # <---- here :)
        for j in range(1, len(s)):
            if i >= len(s):
                break
            elif romanD[s[i]] < romanD[s[j]]:
                oper.append(-1 * romanD[s[i]])
            elif romanD[s[i]] >= romanD[s[j]]:
                oper.append(romanD[s[i]])
            i += 1
        oper.append(romanD[s[len(s) - 1]])
        return sum(oper)

如果您取消注釋for i in range(len(s)-1): out,您將得到 56;)

romanD = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
oper = []
s = input('roman')
i = 0


class Solution(object):
    def romanToInt(self, s):
        rtype = int
        for i in range(len(s)-1):
            for j in range(1, len(s)):
                if i >= len(s):
                    break
                elif romanD[s[i]] < romanD[s[j]]:
                    oper.append(-1 * romanD[s[i]])
                elif romanD[s[i]] >= romanD[s[j]]:
                    oper.append(romanD[s[i]])
                i += 1
            oper.append(romanD[s[len(s) - 1]])
            return sum(oper)

b = Solution()
print(b.romanToInt(s))

你可以在這里查看 圖中還顯示:

在此處輸入圖像描述

神奇的是,我仍然不知道如何刪除我修復的一切。 但確實如此。

romanD = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
oper = []
s = input('roman')


class Solution(object):
    def romanToInt(self, s):
        rtype = int
        for j in range(len(s)):
            if j+1 >= len(s):
                break
            elif romanD[s[j]] < romanD[s[j+1]]:
                oper.append(-1 * romanD[s[j]])
            elif romanD[s[j]] >= romanD[s[j+1]]:
                oper.append(romanD[s[j]])
        oper.append(romanD[s[len(s) - 1]])
        return sum(oper)


b = Solution()
print(b.romanToInt(s))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM