【问题标题】:How, from input-string, generate number (/sum) from assigned values from each letter in the input-string (e.g: name = input('enter letters: ' )如何从输入字符串中根据输入字符串中每个字母的赋值生成数字(/sum)(例如:name = input('enter letters: ')
【发布时间】:2019-10-03 13:03:35
【问题描述】:

从输入字符串中,根据输入字符串中每个字母的赋值生成数字(/sum)(例如:name = input('enter letters: ')

假设 A=1, B=2, C=3.......(等等) 如何从输入字符串中的这些输入字母中打印一个数字作为输出: letters = input ('enter letters: ')-------->如提示时写ABC,然后返回(A+B+C)之和------ >打印(名称)----->6

谢谢, 阿尔辛

【问题讨论】:

  • 你好 Alsing Selnes!欢迎来到堆栈溢出。视线的重点是创建一个知识库,没有任何“调试/编写我的代码”问题。鉴于此,您能否具体告诉我们您的问题是什么,以及您尝试了什么?

标签: python


【解决方案1】:

使用ord获取ASCII值并取模:

letters = input("Enter letters: ")
res = sum(map(lambda x: ord(x.upper())%65+1, letters))
print(res)

这里我使用了map,因为我喜欢它,但你也可以使用list-comprehension:

letters = input("Enter letters: ")
res = sum([ord(letter.upper())%65 + 1 for letter in letters])
print(res)

给出相同的结果:

Enter letters: ABC
6

编辑:对于 Python2,您需要使用 raw_input 而不是 input

letters = raw_input("Enter letters: ")
res = sum(map(lambda x: ord(x.upper())%65+1, letters))
print(res)

如果你想要不同的数字,你可以创建一个函数而不是使用lambda 函数,然后玩一点数学。

例如,如果您希望所有值的范围为 1 到 9:

def get_letter_value(letter):
    value = ord(letter.upper()) % 65  # Gives the standard value starting by 0
    return (value % 9) + 1  # Limits from 1-9 resetting each time

letters = raw_input("Enter letters: ")
res = sum(map(get_letter_value, letters))
print res

用法:

Enter letters: BMZ
14

这只是在玩数学,特别是modulo operation

【讨论】:

  • 嗨,palvarez,我必须事先导入一些东西吗?因为我收到此错误消息; “回溯(最近一次调用最后一次):文件“C:\Users\Alsing\Desktop\Python\proposed.py”,第 5 行,在 中 letters = input("Enter letters: ") File "" ,第 1 行,在 NameError: name 'ABC' is not defined"
  • @AlsingSelnes 没有什么要导入的,看来您正在添加一个新行,试图使用 ABC 作为变量而不设置它。只要有我给你的三行代码就够了
  • 我只是将你的 3 行代码复制并粘贴到 VS Code 中,但仍然弹出错误消息。
  • 啊!你正在使用 Python2 我为你更新了我的答案:)
  • 成功了,谢谢。如果我想像示例中那样以非递增方式制作字母,但是,假设 a-->i 属于数字 1-->9,而 j-->r 属于数字 1-- >9,最后 s-->z 属于 1-->8。如果我输入 BMZ(应该是数字 14),相同的代码会起作用吗?或者甚至使数字随机?
【解决方案2】:

您可以使用字典中的键来分配字母的值。

import string

letters = string.ascii_lowercase
numbers = {i: v for i, v in enumerate(letters, start=1)}
print(numbers)

输出:

{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'}

然后,您将编写函数以通过 input 方法使用字典。 枚举也可以有条件地使用,你可以实现:

numbers = range(10)

new_d = {n: n**2 for n in numbers if n % 2 == 0}
print(new_d)

输出:

{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多