当用户说出文字时如何打印?

时间:2013-07-23 11:18:42

标签: python python-3.3

我的问题可以在下面理解:

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 个答案:

答案 0 :(得分: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

您的代码存在一些问题:

  • Don't compare booleans like that。只需while goodvalue

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

  • str("a")毫无意义。 "a"已经是一个字符串,因此str()在此处不执行任何操作。

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

答案 1 :(得分:2)

正在寻找这样的东西吗?

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

对于“你好”,这输出:

[8, 5, 12, 12, 15]

ord函数返回字母的ascii序数值。减去ord('a')将其反转为0,但你有'a'映射到1,所以它必须调整为1。

答案 2 :(得分:0)

首先,只是为了让您的代码更小,您必须查看一些小内容,而不是打印=="a"而不是打印==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]

答案 3 :(得分: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)使用ord函数完成从字符串字母到数字的转换,该函数将返回所提供字符的ASCII值。