【问题标题】:Change lowercase letters to: numbers 00-25, and uppercase letters to: numbers 26-51将小写字母更改为:数字 00-25,将大写字母更改为:数字 26-51
【发布时间】:2014-02-27 17:15:52
【问题描述】:

我已经尝试了几种不同的方法,但都无济于事。我们需要使用简单的运算符和简单的循环来执行此操作。这是我尝试过的:

def str2num(inputstr):
    i = ''

    for x in inputstr:

        i = i + str.replace(x, str(ord(x)),1)
    i = str(i)

    print(i)

出现一个错误,指出整数不能隐式转换为字符串,我尝试使用 str(ord(x) 修复该错误,但仍然收到相同的错误。

然后我决定尝试转换为列表并使用导入字符串...事情变得一团糟:

def str2num(s):

    import string

    r = string.ascii_lowercase + string.ascii_uppercase
    L = list(r)

    for i in L:
        L [i] = 00 + 1

    print(L)

我没有可以想出的解决方案,有什么建议吗?请记住(我知道这很痛苦,但是)只有简单的解决方案。使用 for、with、while、if、import string 和一般数学运算符。这门课不是关于效率,而是使用基本工具来完成工作。

谢谢。

【问题讨论】:

  • 我还必须能够在 def str2num() 括号中输入一个值,并让它使用上述数字给我一个代码。
  • 你试图用整数 1 替换字符串中的某些内容;这就是错误。你可能想要"1",尽管我不清楚你在该代码中做了什么。
  • 问题来了:
  • 假设我们使用两位数字来编码英文小写和大写字母。因此,字母 a 编码为 00,字母 b 编码为 01,字母 c 编码为 02,……,字母 z 编码为 25,字母 A 编码为 26,字母 B 编码为 27,……,字母 Z 编码为 51。编写一个 python 函数, 称它为 str2num(s),它返回字符串 s 的上述编码。例如,str2num('MyHome') 应该返回字符串 '382433141204'
  • 因此,我被要求将字符串字符转换为数字,并以这些数字的字符串形式将其打印回给我。

标签: python string python-3.x numbers


【解决方案1】:

获取数字列表:

In [172]: t='abcABC'

In [175]: l = map(lambda x: ord(x)-97 if x.islower() else ord(x)-65+26, t)

In [176]: l
Out[176]: [0, 1, 2, 26, 27, 28]

要得到一个带有1'01' 的字符串:

In [179]: ''.join('%02d'%i for i in l)
Out[179]: '000102262728'

功能版本:

In [186]: def str2num(s):
     ...:   res=[]
     ...:   for i in s:
     ...:       if i.islower():
     ...:           res.append(ord(i)-97)
     ...:       else:
     ...:           res.append(ord(i)-65+26)
     ...:   return ''.join('%02d'%i for i in res)

In [187]: str2num('MyHome')
Out[187]: '382433141204'

【讨论】:

  • 如果你要为某人做作业,使用maplambda 这样他们会因为作弊而失败似乎有点残忍。
  • lambda 是我们没有学过的东西,所以很遗憾不能接受答案(根据教授的要求)
  • 该标签已经有 2 年没有在网站上使用了。 显然是问题陈述中的作业。
  • 不是家庭作业,而是考试和测验中出现的问题类型示例。
  • 你不能简化 lambda 吗? l = map(lambda x: ord(x)-97 if x.islower() else ord(x)-39, t)
【解决方案2】:

使用 somestring.islower() 和 somestring.isUpper()

对于小写它的 str(ord(somestring[i])-97) 得到 a-z 的 0 - 25

对于大写的 str(ord(somestring[i])-65+26) 得到 A-Z 的 26 - 51

我不知道你想如何编码,但这应该会有很大帮助。使用你的 Ascii 表;)

这也不会检查 2 位数字,所以如果你想要 00、01 等内容,你也需要弄清楚这一点......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多