字典输出为一行

1 投票
2 回答
5013 浏览
提问于 2025-04-18 07:45

我正在通过 http://GrokLearning.com 学习 Python 3.3,还是个初学者。

我的目标是写一个 Word2SMS 程序。这个程序会告诉用户在普通手机(非智能手机)上应该按哪个“数字键”来拼出一个给定的单词。输入的单词会全部是大写字母,不会有数字或标点符号。假设手机能根据用户输入的数字完美预测出单词。

示例目标输出:

> GROK
4765

我的代码:

KEYPAD = {'A': '2', 'B': '2', 'C': '2', 'D': '3', 'E': '3', 'F': '3', 'G': '4', 'H': '4', 'I': '4', 'J': '5', 'K': '5', 'L': '5', 'M': '6', 'N': '6', 'O': '6', 'P': '7', 'Q': '7', 'R': '7', 'S': '7', 'T': '8', 'U': '8', 'V': '8', 'W': '9', 'X': '9', 'Y': '9', 'Z': '9'}
word = input("Enter word: ")
for key in word:
    print(KEYPAD[key], end='')

结果:

我的代码返回的数字都是在同一行,没有空格,这正是我想要的。不过,我收到了一个通知:你的输出缺少一个结尾的换行符。

缺少结尾的换行符

我试着在最后加上 '\n' 来添加一个换行,这样却出现了 行继续符后面有意外字符 的语法错误。

如果在最后加上 ' ',结果就变成每个数字都在单独一行。


为了参考,我已经看过所有免费的模块,但没有使用过任何付费的。因为我的知识有限,请用简单的语言解释你的答案。

2 个回答

2

这里有一个更简短的解决方案:

KEYPAD = {'A': '2', 'B': '2', 'C': '2', 'D': '3', 'E': '3', 'F': '3', 'G': '4', 'H': '4', 'I': '4', 'J': '5', 'K': '5', 'L': '5', 'M': '6', 'N': '6', 'O': '6', 'P': '7', 'Q': '7', 'R': '7', 'S': '7', 'T': '8', 'U': '8', 'V': '8', 'W': '9', 'X': '9', 'Y': '9', 'Z': '9'}
word = input("Enter word: ")
print(''.join([KEYPAD[k] for k in word])) # This will join all the buttons together and print with an automatic newline

顺便说一下,你的错误信息“在行继续符后出现意外字符 SyntaxError.”的意思是你把 \n 放在了引号外面。\ 放在引号外面表示要继续到下一行,所以它后面不能有其他文字,只能是换行。

4

你只需要在处理完输入字符串后打印出一个换行符:

KEYPAD = {'A': '2', 'B': '2', 'C': '2', 'D': '3', 'E': '3', 'F': '3', 'G': '4', 'H': '4', 'I': '4', 'J': '5', 'K': '5', 'L': '5', 'M': '6', 'N': '6', 'O': '6', 'P': '7', 'Q': '7', 'R': '7', 'S': '7', 'T': '8', 'U': '8', 'V': '8', 'W': '9', 'X': '9', 'Y': '9', 'Z': '9'}
word = input("Enter word: ")
for key in word:
    print(KEYPAD[key], end='') #<-- this line suppresses the newline output
print() #<-- this adds the required newline at the end of all the characters

撰写回答