我的问题可以在下面理解:
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.真的很感激任何帮助!
答案 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值。