Skip to main content
 首页 » 编程设计

python之如何从字符串中取出字母并将它们变成整数

2025年05月04日50lhb25

我被指派创建一个应用程序,该应用程序采用用户的名字和名字(确保它们不超过 10 个字符)并根据此网格计算他们的“幸运名字号码”:

Lucky Name Number Grid

例如,John Smith 将是:

= (1 + 6 + 8 + 5) + (1 + 4 + 9 + 2 + 8)

= 20 + 24

然后将每个值中的数字相加:

= (2 + 0) + (2 + 4)

= 2 + 6

= 8 <- 他们的幸运号码。

这是我目前的代码:

while True: 
    first_name = input("What is your first name? ") 
    if len(first_name) < 10: 
        print("Hello " + first_name + ", nice name!") 
        break 
    else: 
        print("First name is too long, please enter a shorter name.") 
 
while True: 
     second_name = input("What is your second name? ") 
     if len(second_name) < 10: 
         print ("Wow, " + first_name + " " + second_name + " is a really cool name. Let's see how lucky you are...") 
         break 
     else: 
          print ("Second name is too long, please enter a shorter name.") 

但是,我不确定我的下一步是什么,因为我需要获取名称中的每个字母并使其成为特定值。

我能想到的唯一方法是像这样列出每个字母及其分配的值:

A = 1 
B = 2 
C = 3 
D = 4 
E = 5 
F = 6 
G = 7 
H = 8 
I = 9 
J = 1 
K = 2 
L = 3 
M = 4 
N = 5 
O = 6 
P = 7 
Q = 8 
R = 9 
S = 1 
T = 2 
U = 3 
V = 4 
W = 5 
X = 6 
Y = 7 
Z = 8 
 
fletter_1 = first_name[0] 
fletter_2 = first_name[1] 
fletter_3 = first_name[2] 
fletter_4 = first_name[3] 
fletter_5 = first_name[4] 
fletter_6 = first_name[5] 
fletter_7 = first_name[6] 
fletter_8 = first_name[7] 
fletter_9 = first_name[8] 
fletter_10 = first_name[9] 
 
print fletter_1 + fletter_2 + fletter_3 + fletter_4 + fletter_5 + fletter_6 + fletter_7 + fletter_8 + fletter_9 

但这是一个极其漫长的过程,并不是最好的编码方式。

请有人指导我如何以最好的方式完成下一步,因为我不确定该怎么做。

请您参考如下方法:

如果您还没有听说过 ASCII table ,这几乎是如何用二进制表示字符的约定。 python 中的函数 ord(c) 根据 ASCII 表为您提供给定字符的值。 我注意到您的幸运姓名数字网格每 9 个字母给出相同的值,在数学中可以表示为 % 9。因此:

# ASCII value of A 
>>> ord('A')  
65 
# Except that we wanted 1 for A 
>>> ord('A') - 64 
1 
# And we also want 1 for J and S 
>>> (ord('J') - 64) % 9 
1 
>>> (ord('S') - 64) % 9 
1 
>>> (ord('Z') - 64) % 9 
8 

您可以使用最后一个公式:(ord(c) - 64) % 9

编辑: 正如 Loïc G. 所指出的,我的公式有一个小错误,因为模函数有时会返回 0,而您的表格网格的索引从 1 开始。这是最终版本:

ord(c.lower()) - ord('a')) % 9) + 1 

ord('a') 返回 97(避免对值进行硬编码),而 c.lower() 使函数适用于小写和大写字符。与第一个算法的最大区别在于最后的 + 1,根据网格的要求将所有索引移动 1。