鱼C论坛

 找回密码
 立即注册
查看: 1919|回复: 14

[已解决]求助大佬,python罗马数字转整数

[复制链接]
发表于 2021-10-22 12:26:53 | 显示全部楼层 |阅读模式
10鱼币
1.这个代码运行报错

2.求助这个代码的意思
class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        sum=0
        convert={'M': 1000 , 'D': 500 , 'C': 100 , 'L': 50 , 'X': 10 , 'V': 5 , 'I': 1}

        for i in range(len(s)-1):
            if convert[s[i]] < convert[s[i+1]]:
                sum -= convert[s[i]]
            else:
                sum += convert[s[i]]
        sum += convert[s[-1]]
        return sum

    a = eval(input("请输入一个罗马数字:"))
    palindrome_bool = a.romanToInt(a)
    print(palindrome_bool)
最佳答案
2021-10-22 12:26:54
本帖最后由 傻眼貓咪 于 2021-10-22 14:00 编辑

參考我的吧,很久之前我在力扣作解說的代碼
  1. class Solution:
  2.     def romanToInt(self, s: str) -> int:
  3.         roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} # 步驟1
  4.         nums = [roman[i] for i in s][::-1] # 步驟2  # 步驟3
  5.         a = nums[0]
  6.         sum = 0
  7.         for i in nums:  # 步驟4  # 步驟5
  8.             if i < a:
  9.                 sum -= i
  10.             elif i == a:
  11.                 sum += i
  12.             else:
  13.                 a = i
  14.                 sum += i
  15.         return sum

  16. // 作者:傻眼貓咪
  17. // 链接:https://leetcode-cn.com/problems/roman-to-integer/solution/pythonjie-fa-chun-cui-ji-lu-by-sha-yan-m-10c0/
  18. // 来源:力扣(LeetCode)
  19. // 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码
PMS)I5MF3VKULKG}BJJ45_2.png

最佳答案

查看完整内容

參考我的吧,很久之前我在力扣作解說的代碼:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 12:26:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-10-22 14:00 编辑

參考我的吧,很久之前我在力扣作解說的代碼
  1. class Solution:
  2.     def romanToInt(self, s: str) -> int:
  3.         roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} # 步驟1
  4.         nums = [roman[i] for i in s][::-1] # 步驟2  # 步驟3
  5.         a = nums[0]
  6.         sum = 0
  7.         for i in nums:  # 步驟4  # 步驟5
  8.             if i < a:
  9.                 sum -= i
  10.             elif i == a:
  11.                 sum += i
  12.             else:
  13.                 a = i
  14.                 sum += i
  15.         return sum

  16. // 作者:傻眼貓咪
  17. // 链接:https://leetcode-cn.com/problems/roman-to-integer/solution/pythonjie-fa-chun-cui-ji-lu-by-sha-yan-m-10c0/
  18. // 来源:力扣(LeetCode)
  19. // 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码
題解.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 12:57:15 | 显示全部楼层
你这是完整代码?
感觉缺了很多呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-22 12:58:52 | 显示全部楼层
没了,网上搜出来是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:12:31 | 显示全部楼层
傻眼貓咪 发表于 2021-10-22 13:37
參考我的吧,很久之前我在力扣作解說的代碼:

        class Solution:
            def romanToInt(self, s: str) -> int:
                roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}  # 步驟1
                nums = [roman for i in s][::-1]  # 步驟2  # 步驟3
                a = nums[0]
                sum = 0
                for i in nums:  # 步驟4  # 步驟5
                    if i < a:
                        sum -= i
                    elif i == a:
                        sum += i
                    else:
                        a = i
                        sum += i
                return sum

            num = input("请输入一个罗马数字:")
            nums = romanToInt(num)
            print(nums)

报错:
请输入一个罗马数字:I
Traceback (most recent call last):
  File "C:\Users\mate\AppData\Roaming\JetBrains\PyCharmCE2021.2\scratches\second.py", line 21, in <module>
    class Solution:
  File "C:\Users\mate\AppData\Roaming\JetBrains\PyCharmCE2021.2\scratches\second.py", line 38, in Solution
    nums = romanToInt(num)
TypeError: romanToInt() missing 1 required positional argument: 's'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 14:17:06 | 显示全部楼层
pallas 发表于 2021-10-23 14:12
class Solution:
            def romanToInt(self, s: str) -> int:
                roman = ...

如果你是网路上做题(力扣)就可以从头到尾复制我的代码,原因是因为 class Solution 是力扣原本题目设定输出方式,假如你只是课外复习,建议只挑重点复制便可,无需全复制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:20:50 | 显示全部楼层
傻眼貓咪 发表于 2021-10-23 14:17
如果你是网路上做题(力扣)就可以从头到尾复制我的代码,原因是因为 class Solution 是力扣原本题目设定 ...

那大佬,调用函数是这样调用的吗?
            num = input("请输入一个罗马数字:")
            nums = romanToInt(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 14:23:47 | 显示全部楼层
pallas 发表于 2021-10-23 14:12
class Solution:
            def romanToInt(self, s: str) -> int:
                roman = ...

帮你把重点弄出来了,代码:
  1. class Solution:
  2.     def romanToInt(self, s: str) -> int:
  3.         roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
  4.         nums = [roman[i] for i in s][::-1]
  5.         a = nums[0]
  6.         sum = 0
  7.         for i in nums:
  8.             if i < a:
  9.                 sum -= i
  10.             elif i == a:
  11.                 sum += i
  12.             else:
  13.                 a = i
  14.                 sum += i
  15.         return sum

  16. MyTry = Solution()
  17. string = input("请输入一个罗马数字:")
  18. print(MyTry.romanToInt(string))
复制代码
  1. 请输入一个罗马数字:VIII
  2. 8
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:31:30 | 显示全部楼层
傻眼貓咪 发表于 2021-10-23 14:23
帮你把重点弄出来了,代码:

大佬,能麻烦您稍微对您的代码解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:38:14 | 显示全部楼层
傻眼貓咪 发表于 2021-10-23 14:23
帮你把重点弄出来了,代码:

大佬,我想问一下,这个代码是不是不能放入while循环哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 14:49:20 | 显示全部楼层
pallas 发表于 2021-10-23 14:38
大佬,我想问一下,这个代码是不是不能放入while循环哎

只要熟悉/了解题目和代码,想放什么都可以,没有限制,最重要可以以自己最舒服的方式编写代码便可,百百种程序员,就有百百种可能性的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 14:51:22 | 显示全部楼层
pallas 发表于 2021-10-23 14:31
大佬,能麻烦您稍微对您的代码解释一下吗?

我在 4楼 已经标记步骤和解说了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:51:35 | 显示全部楼层
大佬,我用了while循环,但是有错
能麻烦您帮忙看看吗?
while True:
    temp = input("请选择项目:")
    number = int(temp)


    if number == 0:
        # 退出程序
        print("退出!")
        break
    if temp.isdigit() and 0 <= int(temp) <= 6:
        #isdigit()如果字符串只包含数字返回True,否则返回False
        # 判断输入的数字是否在在范围之内,在范围内正常执行
        number = int(temp)
    else:
        # 如果超出范围重新输入
        print("请重新输入项目")
        continue

    if number == 1:

        class Solution:

            def romanToInt(self, s: str) -> int:
                roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
                nums = [roman[i] for i in s][::-1]
                a = nums[0]
                sum = 0
                for i in nums:
                    if i < a:
                        sum -= i
                    elif i == a:
                        sum += i
                    else:
                        a = i
                        sum += i
                return sum

        string = input("请输入一个罗马数字:")
        MyTry = Solution()
        print(MyTry.romanToInt(string))

   if number == 2:
        其他代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 15:43:16 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-23 15:44 编辑
pallas 发表于 2021-10-23 14:51
大佬,我用了while循环,但是有错
能麻烦您帮忙看看吗?
while True:

  1. class Solution:
  2.     def romanToInt(self, s: str) -> int:
  3.         roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
  4.         nums = [roman[i] for i in s][::-1]
  5.         a = nums[0]
  6.         sum = 0
  7.         for i in nums:
  8.             if i < a:
  9.                 sum -= i
  10.             elif i == a:
  11.                 sum += i
  12.             else:
  13.                 a = i
  14.                 sum += i
  15.         return sum

  16. while True:
  17.     try:
  18.         num = int(input("请选择项目:"))
  19.     except:
  20.         print("请重新输入项目\n")
  21.         continue
  22.     if not num:
  23.         print("退出!")
  24.         break
  25.     else:
  26.         match(num):
  27.             case 1:
  28.                 MyTry = Solution()
  29.                 string = input("请输入一个罗马数字:")
  30.                 print(MyTry.romanToInt(string))
  31.             case 2:
  32.                 pass # 其他代码
  33.             case 3:
  34.                 pass # 其他代码
  35.             case 4:
  36.                 pass # 其他代码
复制代码
  1. 请选择项目:1
  2. 请输入一个罗马数字:VIII
  3. 8
  4. 请选择项目:0
  5. 退出!
复制代码
以上代码只有符合 Python 版本 3.10.0 才可运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 21:52:31 | 显示全部楼层
傻眼貓咪 发表于 2021-10-23 15:43
以上代码只有符合 Python 版本 3.10.0 才可运行

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表