Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用听写器从单词到数字的转换,如在电话的按键中_Python_Dictionary - Fatal编程技术网

Python 用听写器从单词到数字的转换,如在电话的按键中

Python 用听写器从单词到数字的转换,如在电话的按键中,python,dictionary,Python,Dictionary,你好,在问这个问题之前,我已经做了一次彻底的搜索,我一直都是这样。我正在尝试使用python中的字典,从一个书面单词到电话键盘上每个字母对应的字母。这在没有字典的情况下是很容易做到的,但是使用字典虽然编码速度更快,但对我来说是相当混乱的。我们将不胜感激。到目前为止,我的代码是 def phone (word): d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5} for i in range (len(word)):

你好,在问这个问题之前,我已经做了一次彻底的搜索,我一直都是这样。我正在尝试使用python中的字典,从一个书面单词到电话键盘上每个字母对应的字母。这在没有字典的情况下是很容易做到的,但是使用字典虽然编码速度更快,但对我来说是相当混乱的。我们将不胜感激。到目前为止,我的代码是

def phone (word):
    d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5}
    for i in range (len(word)):
        word.split ()
        return d[word]
我试着用“ADGJ”这个词来做测试

我得到的错误:

 File "<pyshell#13>", line 1, in <module>
    phone('ADGJ')
  File "C:\Users\Christopher\Desktop\pratice.py", line 195, in phone
    return d[word]
KeyError: 'ADGJ'
但我有一个新的错误:

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    phone ('ABABBAA')
  File "C:\Users\Christopher\Desktop\pratice.py", line 194, in phone
    return d[word]
TypeError: unhashable type: 'list'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
电话('ababaa')
文件“C:\Users\Christopher\Desktop\pratice.py”,第194行,电话中
返回d[word]
TypeError:不可损坏的类型:“列表”
我用的这个词就是“abbeaba”的意思,因为这是我在字典里定义的全部,因为这是对理解的测试


我想我仍然需要一些东西来连接dictionary函数,但仍在试图找出它是什么…

这不是有效的Python

d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5}
您需要定义每个键、值对

d = {
     'A':2, 'B':2, 'C':2, 
     'D':3, 'E':3, ... etc
    }
然后可以将单词转换为相应的数字

def getNums(word):
    return ''.join(str(d[i]) for i in word)

>>> getNums('ADGJ')
'2345'

这是无效的Python

d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5}
您需要定义每个键、值对

d = {
     'A':2, 'B':2, 'C':2, 
     'D':3, 'E':3, ... etc
    }
然后可以将单词转换为相应的数字

def getNums(word):
    return ''.join(str(d[i]) for i in word)

>>> getNums('ADGJ')
'2345'

这是无效的Python

d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5}
您需要定义每个键、值对

d = {
     'A':2, 'B':2, 'C':2, 
     'D':3, 'E':3, ... etc
    }
然后可以将单词转换为相应的数字

def getNums(word):
    return ''.join(str(d[i]) for i in word)

>>> getNums('ADGJ')
'2345'

这是无效的Python

d = {'A''B''C':2,'D''E''F':3,'G''H''I':4,'J''K''L':5}
您需要定义每个键、值对

d = {
     'A':2, 'B':2, 'C':2, 
     'D':3, 'E':3, ... etc
    }
然后可以将单词转换为相应的数字

def getNums(word):
    return ''.join(str(d[i]) for i in word)

>>> getNums('ADGJ')
'2345'

你的语法有点错误;你不能让字典中的赋值像switch语句一样失败

试试这个:

d = {'A':2,'B':2,'C':2,'D':3,'E':3,'F':3,'G':4,'H':4,'I':4,'J':5,'K':5,'L':5}

你的语法有点错误;你不能让字典中的赋值像switch语句一样失败

试试这个:

d = {'A':2,'B':2,'C':2,'D':3,'E':3,'F':3,'G':4,'H':4,'I':4,'J':5,'K':5,'L':5}

你的语法有点错误;你不能让字典中的赋值像switch语句一样失败

试试这个:

d = {'A':2,'B':2,'C':2,'D':3,'E':3,'F':3,'G':4,'H':4,'I':4,'J':5,'K':5,'L':5}

你的语法有点错误;你不能让字典中的赋值像switch语句一样失败

试试这个:

d = {'A':2,'B':2,'C':2,'D':3,'E':3,'F':3,'G':4,'H':4,'I':4,'J':5,'K':5,'L':5}

好的,让我来帮你

这是您当前的代码:

def phone (word):
    d = {'A':2, 'B':3}
    word = word.split()
    return d[word]
第一行定义了函数签名,这意味着您有一个名为
phone
的函数,它接受一个名为
word
的参数。我的第一条评论是:为函数和变量选择合适的名称
phone
不是“函数”,因为函数是一种指令或类似命令的东西,但没关系(
letters\u to\u phonenumber
我认为更好)

第二行定义了一个字典,它将
'a'
映射到
2
'B'
映射到'3'。现在没关系

第三行用
split()
函数的返回值覆盖
word
变量,该函数是
string
类的一个方法。让我们查阅以下文档:

str.split([sep[,maxslit]])
: 使用sep作为分隔符字符串,返回字符串中的单词列表

由于您显然没有定义一个
sep
(arator),我们必须弄清楚该函数将做什么。阅读进一步说明:

如果未指定sep或sep为None,则使用不同的拆分算法 应用:连续空格的运行被视为单个空格 分隔符,并且结果在开始处不包含空字符串 如果字符串有前导或尾随空格,则为end。因此,, 拆分空字符串或仅包含空格的字符串 使用None分隔符返回[]

因此,它将在字符串中查找空格。你不知道什么是空白?让我们谷歌:

在计算机科学中,空白是任何字符或字符序列 表示中的水平或垂直空格的空白字符 印刷术。渲染时,空白字符不对应 到可见标记,但通常会占用页面上的某个区域

好的,现在我们知道了,空白就像
空格
选项卡
等。像
“abababaa”
这样的字符串不包含任何空白,因此
split()
显然只返回一个列表,其中只有一项:输入字符串本身

让我们启动python解释器来检查这一点(这是一种常见的调试方式):

代码中的下一行是
返回d[word]
。因此函数在这里终止并返回一个输出值,即
d[word]
。但是
d[word]
的价值是什么?嗯,
d
是一个字典(带有键'a'和'B'),您尝试查找键的值
['abababaa']
。但是您的字典
d
中没有这样的键,更不用说无法为字典创建键,因为键必须是可散列对象。什么是可散列对象?让我们谷歌:

hashable:如果一个对象的hash值是 在其生命周期内进行更改(它需要一个散列()方法),并且可以 与其他对象相比(它需要eq()或cmp()方法)。 比较相等的可散列对象必须具有相同的散列值

Hashability使对象可用作字典键和集合 成员,因为这些数据结构在内部使用哈希值

Python的所有不可变内置对象都是可散列的,而 可变容器(如列表或字典)是可用的。对象 默认情况下,用户定义类的实例是可散列的;他们 所有比较都不相等(除了它们自己),并且它们的哈希值为 他们的id()

好的,所以
'A'
是可散列的;-)和任何种类的字符串等,但不是
列表
,在