迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中将罗马数字转换为整数

作者:迹忆客 最近更新:2023/04/26 浏览次数:

上学时我们都学会了如何将罗马数字转换为整数。 现在,当我们是程序员时,让我们编写一个 Python 程序来为我们做这件事。

在本文中,我们将学习如何使用 Python 将罗马数字转换为整数。


在 Python 中将罗马数字转换为整数

在我们跳到实际代码之前,让我们修改一下将罗马数字转换为整数的规则。 以下是用于某些整数的基本符号:

Integer      Roman Numeral
   1               I
   5               V
   10              X
   50              L
   100             C
   500             D
   1000            M

我们知道我们可以从给定的一串罗马数字中找到一个整数对应的值。 但是我们这样做时必须遵守一些规则。

  1. 对于给定的一串罗马数字,从左向右移动时,如果符号的值减小或保持不变,则我们将它们的等价整数相加以获得整数的最终答案。 ```bash XVII

X - 10 V - 5 I - 1 I - 1

10 + 5 + 1 + 1 = 17

在上面的示例中,值从左到右递减。 因此,我们将它们全部相加并得到 17 作为整数值。
1. 对于给定的一串罗马数字,从左向右移动时,如果符号的值增加,则我们用较大的值减去较小值的整数等值,得到最终答案的整数。
```bash
XL

X - 10
L - 50

50 - 10 = 40

在上面的示例中,值从左到右增加。 所以,我们减去它们得到 40 作为整数值。

在编写将罗马数字转换为整数的代码时,我们需要记住这两个规则。 另外请注意,除了字典之外,我们还可以使用其他几种方法将罗马数字转换为整数。

让我们一一来看。


在 Python 中将罗马数字转换为整数的 Python 程序

将罗马数字转换为整数的最简单方法是使用 if 语句来存储基本的罗马符号。 这是相同的代码。

# function to store the basic roman symbols
def map_symbols(s):
    if (s == 'I'):
        return 1
    if (s == 'V'):
        return 5
    if (s == 'X'):
        return 10
    if (s == 'L'):
        return 50
    if (s == 'C'):
        return 100
    if (s == 'D'):
        return 500
    if (s == 'M'):
        return 1000
    return -1

# function to perform the conversion
def change_roman_to_int(roman):
    ans = 0
    i = 0

    while(i<len(roman)):
        x1 = map_symbols(roman[i])

        if(i+1 < len(roman)):
            x2 = map_symbols(roman[i+1])

            if (x1 >= x2):
                ans = ans + x1
                i = i + 1
            else:
                ans = ans + x2 - x1
                i = i + 2

        else:
            ans = ans + x1
            i = i + 1

    return ans

# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

输出:

Enter the roman numeral: MLXVI
The integer equivalent is:
1066

让我们看看这段代码的工作原理。

当我们输入一个罗马字符串作为输入时,它被存储在变量 r 中,然后传递给函数 change_roman_to_int。 我们在此函数内使用 while 循环来遍历整个字符串。

此外,当 while 循环遍历每个值时,while 循环内的 if-else 语句执行以下操作:

  1. 如果当前符号的值大于或等于下一个符号的值,则将当前值添加到变量 ans 中。
  2. 否则,将下一个符号的值添加到变量 ans 中,然后从中减去当前值。

这基本上就是这段代码的工作原理。

现在让我们看看另一种方法,我们使用 Python 字典将罗马数字转换为整数。


在 Python 中使用 Python 字典将罗马数字转换为整数

在这里,基本思想保持不变。 唯一改变的是我们使用字典来存储罗马数字及其对应的整数值,而不是 if 语句。

这是相同的代码。

# function to convert roman numeral into an integer
def change_roman_to_int(roman):

    # dictionary to store the roman-integer values
    map_symbols = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

    ans = 0
    for i in range(len(roman)):
        if i > 0 and map_symbols[roman[i]] > map_symbols[roman[i - 1]]:
            ans += map_symbols[roman[i]] - 2 * map_symbols[roman[i - 1]]
        else:
            ans += map_symbols[roman[i]]
    return ans


# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

输出:

Enter the roman numeral: MMMCMLXX
The integer equivalent is:
3970

请注意 ,您可以使用 for 循环或 while 循环来遍历输入字符串,因为两者的工作方式相似。

您还可以将 enumerate 函数与字典一起使用,如下面的代码所示。

# function to convert roman numeral into an integer
def change_roman_to_int(roman):

    # dictionary to store the roman-integer values
    map_symbols = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

    ans = 0
    l = len(roman)
    for (i, v) in enumerate(roman):
        if i < l-1 and map_symbols[v] < map_symbols[roman[i+1]]:
            ans -= map_symbols[v]
        else:
            ans += map_symbols[v]

    return ans

# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

输出:

Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994

我们一直只在字典中添加 7 个基本的罗马符号。 如果我们添加更多自定义符号,我们可以进一步简化代码。

看看下面给出的代码。

# function to change a roman numeral into an integer
def change_roman_to_int(roman):
    custom_symbols = {"IV":-2,"IX":-2, "XL":-20, "XC":-20, "CD":-200, "CM":-200}
    map_symbols = {"I":1, "V":5,"X":10, "L":50,"C":100, "D":500,"M":1000}
    ans = 0

    for i in roman:
        ans += map_symbols[i]

    for i in range(len(roman) - 1):
        merge = str(roman[i] + roman[i + 1])
        if merge in custom_symbols:
            ans += custom_symbols[merge]

    return ans

# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

输出:

Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994

您对这段代码的巧妙之处不感到惊讶吗? 让我们看看这段代码是如何工作的。

在 change_roman_to_int 函数中,我们有两个字典:具有通常 7 个值的 map_symbols 字典和具有对应于一对罗马符号的负值的 custom_symbols 字典。

此外,第一个 for 循环将所有罗马符号的整数值相加并将总和存储在变量 ans 中。 这是此步骤的样子:

MCMXCIV
M = 1000, C = 100, M = 1000, X = 10, C = 100, I = 1, V = 5

1000 + 100 + 1000 + 10 + 100 + 1 + 5 = 2216
ans = 2216

然后,第二个 for 循环遍历罗马字符串,一次获取两个符号并将它们作为字符串存储在变量 merge 中。 此 for 循环内的 if 语句检查合并的对是否存在于字典 custom_symbols 中。

如果找到,则将相应的负值添加到变量 ans 中。 这是此步骤的样子:

MC - Not found

CM - Found
ans = 2216 + (-200)
ans = 2016

MX - Not found

XC - Found
ans = 2016 + (-20)
ans = 1996

CI - Not found

IV - Found
ans = 1996 + (-2)
ans = 1994

这基本上就是这段代码的工作原理。

我们编写所有这些代码已经很长时间了。 现在,让我们坐下来让 Python 来完成这项工作。


在 Python 中使用 Python Roman 模块将罗马数字转换为整数

怎么会有人使用 Python 而不知道必须有一个模块具有将罗马数字转换为整数的功能? 嗯,那个模块叫做 roman。

要下载此模块,请在 cmd 上运行以下命令。

$ pip install roman

输出:

Downloading roman-3.3-py2.py3-none-any.whl (3.9 kB)
Installing collected packages: roman
Successfully installed roman-3.3

安装模块后,您必须看到上述消息。

现在,我们可以将这个模块导入到我们的代码中,并使用函数 fromRoman() 将任何罗马数字转换为整数。

import roman
x=roman.fromRoman("MCMXCIV")
print(x)

输出:

1994

总结

在本文中,我们研究了一些非常有趣的方法,可以在 Python 中将罗马数字转换为整数。 我们使用 Python if 语句和 Python 字典来实现这一点。

此外,我们研究了如何使用罗马对的负值来使代码更简单和更短。 最后,我们看到了 Python 的 roman 模块的使用,它使用 fromRoman() 函数将罗马数字转换为整数。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便