0
点赞
收藏
分享

微信扫一扫

罗马数字判定器( bug 修正)

左手梦圆 2022-01-31 阅读 25
python

罗马数字百科词条



罗马数字判定器


  在做“罗马数字转整数”的练习时,想到怎样保证输入的罗马数字字符串是合格的罗马数字哩,那不得进行下输入字符串的判定么?因而就有了这个练习。

  1. 题目
  2. 代码运行效果
  3. 完整代码
  4. bug 修正2022-1-30

练习题目


回首页

代码运行效果


回首页

python完整代码

(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
# coding: utf-8


def isRoman(s):
    '''罗马数字判定'''
    s = s.strip() #去除罗马数字字符串前后空格。
    for i in s: #含七个罗马数字构造字母以外的字符,为非。
        if i not in list('IVXLCDM'): #遍历罗马数字字符串
            	return False
    for i in ('I', 'X', 'C', 'M'): #检查可以重复字母是否超过三次。
        if i*4 in s: #模10位最多重复三次。    
            return False
    for i in ('V', 'L', 'D'): #不可重复字母。
        if i*2 in s: #模5位不可重复。
            return False
    for i in ('IL','IC', 'ID', 'IM', 'XD', 'XM'): #穷举不可为之“减”构造。
        if i in s:
            return False
    for i in ('VX','VL', 'VC', 'VD', 'VM', 'LC', 'LD', 'LM', 'DM'): #穷举不可为之“减”构造。
        if i in s:
            return False
    for i in ('IIV','IIX', 'XXL', 'XXC', 'CCD', 'DDM'): #穷举不可为之“减”构造(减两小的数)。
        if i in s:
            return False
    return True

   
s = 'IL', 'MMMIIVII', 'CIIX', 'CIX', 'YXIII', 'CVIII', 'MXLVIII'
for i in s:
    print(f'\n\n{"判定罗马数字":_^36}\n\n\n{" ":12}{i}”:{isRoman(i)}\n\n\n{"The End":_^42}\n')
input()

回首页

bug 修正(2022-1-30)

1. 加入了罗马数字零 N(n) 的判断。
2. 修正了 ‘iviv’ ‘cdcd’ 等一个罗马数字有两个 V、L、D 的错误。
3. 优化了只能输入大写英文字母的不适用。(看到罗马数字在线转换可以实现大小写输入,用 str.strip().upper() 对输入进行了去除前后空格和转大写操作,对大小写罗马数字英文字母输入,“拯救”了我的处理大写英文字母的代码,让她无惧大小写输入。)

优化 python 代码:

# coding: utf-8


def isRoman(s):
    '''罗马数字判定'''
    if s == 'N': #罗马数字是零 N(n) ,返回 True 。
        return True
    for i in s: #含七个罗马数字构造字母以外的字符,为非。
        if i not in list('IVXLCDM'): #遍历罗马数字字符串
            	return False
    for i in ('I', 'X', 'C', 'M'): #检查可以重复字母是否超过三次。
        if i*4 in s: #模10位最多重复三次。    
            return False
    for i in ('V', 'L', 'D'): #不可重复字母。
        if i*2 in s or Roman.count(i) == 2: #模5位不可重复,且一个罗马数字里不能有两个V、L、D。
            return False
    for i in ('IL','IC', 'ID', 'IM', 'XD', 'XM'): #穷举不可为之“减”构造。
        if i in s:
            return False
    for i in ('VX','VL', 'VC', 'VD', 'VM', 'LC', 'LD', 'LM', 'DM'): #穷举不可为之“减”构造。
        if i in s:
            return False
    for i in ('IIV','IIX', 'XXL', 'XXC', 'CCD', 'DDM'): #穷举不可为之“减”构造(减两小的数)。
        if i in s:
            return False
    return True


while True:
    Roman0 = input(f'\n\n{"输入罗马数字:":>13}')
    Roman = Roman0.strip().upper()
    print(f'\n\n{"判定罗马数字":_^36}\n\n\n{" ":12}{Roman0}”:{isRoman(Roman)}\n\n\n{"The End":_^42}\n')
    if Roman0 == '':
        break
s = 'IL', 'MMMIIVII', 'CIIX', 'CIX', 'YXIII', 'CVIII', 'MXLVIII'
for i in s:
    print(f'\n\n{"判定罗马数字":_^36}\n\n\n{" ":12}{i}”:{isRoman(i)}\n\n\n{"The End":_^42}\n')
input()

回首页

我的HOT博:

  • New:罗马数字转换器|罗马数字生成器(当前阅读1053)
  • 让QQ群昵称色变的神奇代码(当前阅读1252)
  • 斐波那契数列(递归实现和for实现)(当前阅读1829)
  • 排序数组中查找元素的重复起止位置(当前阅读1204)
  • 柱状图中最大矩形(当前阅读1608)
  • 电话拨号键盘的字母组合(当前阅读1224)
  • 密码强度检测器(当前阅读1670)
  • 求列表平衡点(当前阅读1704)
  • 字符串统计(当前阅读2067)
  • 尼姆游戏(代码优化版)(当前阅读825)
  • Hot:尼姆游戏(聪明版首发)(当前阅读3247)
推荐条件 点阅破千

相关文章:

  • 练习:罗马数字转整数
  • 罗马数字转换器|罗马数字生成器
  • 罗马数字转换器(用罗马数字构造元素的值取模实现)
  • 罗马数字在线转换,不支持罗马数字N(n)零的转换。

上一篇: 练习:有趣的二维数组
下一篇:


回首页

老齐漫画头像

精品文章:

  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告

举报

相关推荐

罗马数字判定器

罗马数字

罗马数字转整数

leetcode罗马数字转整数

[蓝桥杯2012] 罗马数字

JS算法-整数转罗马数字

华师复试 D 罗马数字

0 条评论