-1

我的问题可以理解如下:

goodvalue=False
while (goodvalue==False):
   try:
      word=str(input("Please enter a word: "))
   except ValueError:
       print ("Wrong Input...")
   else:
       goodvalue=True

word=word.lower()
List=list(map(str,word))
lenList=len(list(map(str,word)))
listofans=[]
x=0
while (lenList-1==x):
    if List[x]==str("a"):
        listofans[x]=str("1")
        x=x+1
    elif List[x]==str("b"):
        listofans[x]=str("2")
        x=x+1
    elif List[x]==str("c"):
        listofans[x]=str("3")
        x=x+1

对于所有字母,它会持续一段时间......然后:

sumofnums=listofans[0]       
y=1
while (lenList-2==y):
    sumofnums+=listofans[y]

print ("The number is: ", sumofnums)

所以基本上,如果我打招呼,它应该返回 8 5 12 12 15。任何帮助都非常感谢!

4

4 回答 4

2

您的代码非常混乱,其中一些甚至不需要(不需要所有这些用途map。结构也不需要try/except

为什么不简化一点;)。

>>> import string
>>> d = {j:i for i, j in enumerate(string.lowercase, 1)}
>>> for i in 'hello':
...     print d[i],
... 
8 5 12 12 15

您的代码存在一些问题:

  • 不要像那样比较布尔值。做吧while goodvalue

  • List=list(map(str,word))是过度的。需要一个简单List = list(word)的,但您可能甚至不需要它,因为您可以遍历字符串(如上所示)

  • str("a")是没有意义的。"a"已经是一个字符串,因此str()这里什么都不做。

  • 正如我之前所说,try/except不需要。没有输入可能会导致ValueError. (除非你的意思是int()

于 2013-07-23T11:27:14.547 回答
2

正在寻找这样的东西吗?

[ord(letter)-ord('a')+1 for letter in word]

对于“你好”,此输出:

[8, 5, 12, 12, 15]

ord 函数返回字母的 ascii 序数值。减去 ord('a') 会将其变基为 0,但您将 'a' 映射到 1,因此必须将其调整为 1。

于 2013-07-23T11:27:59.030 回答
0

首先,只是为了使您的代码更小,您必须查看诸如 print 之类的小东西,而不是=="a"print ==str("a")。那是错误的。

所以这是你的旧while循环:

while (lenList-1==x):
    if List[x]==str("a"):
        listofans[x]=str("1")
        x=x+1
    elif List[x]==str("b"):
        listofans[x]=str("2")
        x=x+1
    elif List[x]==str("c"):
        listofans[x]=str("3")
        x=x+1

这是新的:

while (lenList-1==x):
    if List[x]=="a":
        listofans[x]="1"
        x=x+1
    elif List[x]=="b":
        listofans[x]="2"
        x=x+1
    elif List[x]=="c":
        listofans[x]="3"
        x=x+1

关于您的问题,这是一个解决方案:

[ord(string)-ord('a')+1 for string in word]

如果您打印“hello”,这将返回您:

[8, 5, 12, 12, 15]
于 2013-07-23T11:28:47.673 回答
0

尝试这个:

goodvalue=False
while (goodvalue==False):
   try:
      word=str(input("Please enter a word: "))
   except ValueError:
       print ("Wrong Input...")
   else:
       goodvalue=True

word=word.lower()
wordtofans=[]

for c in word:
    if c >= 'a' and c <= 'z':
        wordtofans.append( int(ord(c)-ord('a')+1) )

print wordtofans

您可以直接在 for 循环中迭代字符串,而不必将字符串转换为列表。

您可以在此处进行控制检查,以确保只有字母 a..z 和 A..Z 被转换为数字。

从字符串字母到数字的转换是使用int(ord(c)-ord('a')+1)which usesord函数完成的,该函数将为所提供的字符返回一个 ASCII 值。

于 2013-07-23T11:29:28.110 回答