pallas 发表于 2021-10-22 12:26:53

求助大佬,python罗马数字转整数

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] < convert]:
                sum -= convert]
            else:
                sum += convert]
      sum += convert]
      return sum

    a = eval(input("请输入一个罗马数字:"))
    palindrome_bool = a.romanToInt(a)
    print(palindrome_bool)

傻眼貓咪 发表于 2021-10-22 12:26:54

本帖最后由 傻眼貓咪 于 2021-10-22 14:00 编辑

參考我的吧,很久之前我在力扣作解說的代碼: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 = for i in s][::-1] # 步驟2# 步驟3
      a = nums
      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

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

大马强 发表于 2021-10-22 12:57:15

你这是完整代码?
感觉缺了很多呀

pallas 发表于 2021-10-22 12:58:52

没了,网上搜出来是这样的{:10_250:}

pallas 发表于 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 = for i in s][::-1]# 步驟2# 步驟3
                a = nums
                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'

傻眼貓咪 发表于 2021-10-23 14:17:06

pallas 发表于 2021-10-23 14:12
class Solution:
            def romanToInt(self, s: str) -> int:
                roman = ...

如果你是网路上做题(力扣)就可以从头到尾复制我的代码,原因是因为 class Solution 是力扣原本题目设定输出方式,假如你只是课外复习,建议只挑重点复制便可,无需全复制

pallas 发表于 2021-10-23 14:20:50

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

那大佬,调用函数是这样调用的吗?
            num = input("请输入一个罗马数字:")
            nums = romanToInt(num)

傻眼貓咪 发表于 2021-10-23 14:23:47

pallas 发表于 2021-10-23 14:12
class Solution:
            def romanToInt(self, s: str) -> int:
                roman = ...

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

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

pallas 发表于 2021-10-23 14:31:30

傻眼貓咪 发表于 2021-10-23 14:23
帮你把重点弄出来了,代码:

大佬,能麻烦您稍微对您的代码解释一下吗?{:10_254:}

pallas 发表于 2021-10-23 14:38:14

傻眼貓咪 发表于 2021-10-23 14:23
帮你把重点弄出来了,代码:

大佬,我想问一下,这个代码是不是不能放入while循环哎

傻眼貓咪 发表于 2021-10-23 14:49:20

pallas 发表于 2021-10-23 14:38
大佬,我想问一下,这个代码是不是不能放入while循环哎

只要熟悉/了解题目和代码,想放什么都可以,没有限制,最重要可以以自己最舒服的方式编写代码便可,百百种程序员,就有百百种可能性的代码

傻眼貓咪 发表于 2021-10-23 14:51:22

pallas 发表于 2021-10-23 14:31
大佬,能麻烦您稍微对您的代码解释一下吗?

我在 4楼 已经标记步骤和解说了{:5_108:}

pallas 发表于 2021-10-23 14:51:35

大佬,我用了while循环,但是有错{:10_254:}
能麻烦您帮忙看看吗?{:10_254:}
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 = for i in s][::-1]
                a = nums
                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:
      其他代码

傻眼貓咪 发表于 2021-10-23 15:43:16

本帖最后由 傻眼貓咪 于 2021-10-23 15:44 编辑

pallas 发表于 2021-10-23 14:51
大佬,我用了while循环,但是有错
能麻烦您帮忙看看吗?
while True:


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

while True:
    try:
      num = int(input("请选择项目:"))
    except:
      print("请重新输入项目\n")
      continue
    if not num:
      print("退出!")
      break
    else:
      match(num):
            case 1:
                MyTry = Solution()
                string = input("请输入一个罗马数字:")
                print(MyTry.romanToInt(string))
            case 2:
                pass # 其他代码
            case 3:
                pass # 其他代码
            case 4:
                pass # 其他代码请选择项目:1
请输入一个罗马数字:VIII
8
请选择项目:0
退出!以上代码只有符合 Python 版本 3.10.0 才可运行

pallas 发表于 2021-10-23 21:52:31

傻眼貓咪 发表于 2021-10-23 15:43
以上代码只有符合 Python 版本 3.10.0 才可运行

谢谢大佬
页: [1]
查看完整版本: 求助大佬,python罗马数字转整数