shangshuai 发表于 2024-1-31 21:04:55

python从0开始 第43讲的编程第0题

罗马数字包含 I、V、X、L、C、D、M 七种字符,分别表示数值 1、5、10、50、100、500、1000。
将数字 2 写做罗马字符的形式是 II(即 I + I),数字 12 写做 XII(即 X + I + I),27 写做 XXVII(即 X + X + V + I + I),这就有点像咱平时上市场买菜给钱的算法(一颗大白菜 27 元,那么就给两张10元,一张5元和两张1元这样的组合)。
罗马字符的组合也存在一些特殊规则,比如 4 不写做 IIII,而是 IV(即 I 在 V 的左边,表示 5 - 1,因此得到数字 4),类似的特例如下:
I 可以放在 V(5)和 X(10)的左边,表示 4 和 9
X 可以放在 L(50)和 C(100)的左边,表示 40 和 90
C 可以放在 D(500)和 M(1000)的左边,表示 400 和 900
题目要求:编写一个函数,将指定的罗马字符转换为数字的形式。
我的代码:
dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = 0

def jisuan2():
    global count
    for j in range(len(list1)):
      if list1 + list1 == "IV" or list1 + list1 == "IX" or list1 + list1 == "XL" or list1 + list1 == "XC" or list1 + list1 == "CD" or list1 + list1 == "CM":
            count = count + (int(dic1.get(list1)) - int(dic1.get(list1)))
            j = j + 2
      else:
            count = count + int(dic1.get(list1))   
    return count
list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())

错误原因:IndexError: string index out of range
找不到代码逻辑到底哪里出错 希望大神们帮助一下

FishC 发表于 2024-1-31 21:06:07

您的代码存在一些问题。首先,您定义了一个名为`list1`的变量来接收用户输入的罗马字符,但您在循环中尝试使用`list1`作为索引来访问字符。这是不正确的,因为字符串是不可更改的,不能像列表一样进行索引操作。要获取字符串的特定字符,您可以通过索引操作符`[]`加上位置索引来实现,例如`list1`。

其次,在判断特殊情况时,您使用了`list1 + list1`来判断是否为特殊组合的罗马数字。这是不正确的,因为`list1`是一个字符串,它不会自动与自身连接。要判断字符串是否为特定值,您可以使用`==`运算符。

最后,虽然您在循环中尝试通过`j = j + 2`来跳过已处理的特殊组合,但这样做是不必要的。您可以通过直接将`j`增加2来实现。此外,由于所有的特殊组合都是由两个字符组成的,所以您可以通过判断`list1`是否等于特殊组合来处理它们。

以下是修复后的代码示例:

dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = 0

def jisuan2():
    global count
    for j in range(len(list1)):
      if j < len(list1) - 1 and list1 in ["IV", "IX", "XL", "XC", "CD", "CM"]:
            count = count + (dic1] - dic1])
            j = j + 1
      else:
            count = count + dic1]   
    return count

list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())

希望这可以帮助您解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

cjjJasonchen 发表于 2024-1-31 21:23:16

看看完整报错信息

shangshuai 发表于 2024-1-31 21:30:38

cjjJasonchen 发表于 2024-1-31 21:23
看看完整报错信息

显示第7行IndexError: string index out of range

shangshuai 发表于 2024-1-31 21:53:26

dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = z = 0

def jisuan2():
    global count
    global z
    for j in range(len(list1)):
      if z != 0:
            z = z - 1
            continue
      else:
            if list1 in ["IV", "IX", "XL", "XC", "CD", "CM"]:
                count = count + (int(dic1.get(list1)) - int(dic1.get(list1)))
                z = 1
            else:
                count = count + int(dic1.get(list1))
    return count
list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())

谢谢大哥们关系 我刚刚自己改出来了 更改了判定就好啦

cjjJasonchen 发表于 2024-1-31 21:54:21

shangshuai 发表于 2024-1-31 21:30
显示第7行IndexError: string index out of range

for 循环那里,len()后面-1


如果解决了的话别忘了给个最佳喔~

cjjJasonchen 发表于 2024-1-31 22:03:06

感谢最佳~
页: [1]
查看完整版本: python从0开始 第43讲的编程第0题