Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x Python ord()和chr()_Python 3.x_List_For Loop_Chr_Ord - Fatal编程技术网

Python 3.x Python ord()和chr()

Python 3.x Python ord()和chr(),python-3.x,list,for-loop,chr,ord,Python 3.x,List,For Loop,Chr,Ord,我有: 根据我的理解,这应该只输出句子中的每个字母,如: txt = input('What is your sentence? ') list = [0]*128 for x in txt: list[ord(x)] += 1 for x in list: if x >= 1: print(chr(list.index(x)) * x) 对于字符串“aB)a2a2a2”),输出是正确的: )) 111 3333 etc. 对于字符串

我有:

根据我的理解,这应该只输出句子中的每个字母,如:

txt = input('What is your sentence? ')  
list = [0]*128
for x in txt:
    list[ord(x)] += 1
for x in list:
        if x >= 1:
            print(chr(list.index(x)) * x)
对于字符串“aB)a2a2a2”),输出是正确的:

))
111
3333
etc.
对于字符串“aB)A2A2”,输出错误:

))
222
B
aaaa

我觉得我的所有基础都被覆盖了,但我不确定这段代码有什么问题。

当您执行
list.index(x)
时,您正在列表中搜索出现值的第一个索引。但这并不是您真正想要的,您想要的是刚刚读取的值的特定索引,即使相同的值也出现在列表的前面

从序列中沿边值获取索引的最佳方法是使用
enuemerate

)
222
)
aaaa
这将使您获得所需的输出,但是还有其他一些事情可以使您的代码更易于阅读和理解。首先,使用
list
作为变量名是一个非常糟糕的主意,因为这将在命名空间中隐藏内置
list
类型的名称。这使得任何阅读您的代码的人都感到非常困惑,如果您想出于某种目的而使用普通的
列表
,并且不记得您已经将其用于自己的变量,那么您甚至会感到困惑

另一个问题也是关于变量名的,但它有点微妙。您的两个循环都使用名为
x
的循环变量,但每次值的含义都不同。第一个循环覆盖输入字符串中的字符,而后一个循环覆盖每个字符的计数。使用有意义的变量会使事情变得更清楚

以下是我建议的所有修复方案的组合:

for i, x in enumerate(list):
    if x >= 1:
        print(chr(i) * x)

因此,请解释您的代码有何错误输入“aB)a2a2a2”的输出错误,它甚至不计算字母B。不要使用
list
作为变量名称,因为它是内置的名称。在任何情况下,
list.index(x)
没有真正意义。在上下文中,
x
是一个整数,该整数可以出现在列表中的多个位置。在许多情况下,
索引(x)
不会返回实际需要的索引。请改用
枚举
。首先,不要给变量命名
列表
,它与内置类型同名,可能会以奇怪的方式把事情搞得一团糟。我经常使用变量名
ch
,而不是完全拼写
字符
,因为这样更容易理解输入和读取-但它的符号性足以让人理解这一点。@MarkRansom:是的,当然没有必要像我在这里所做的那样使用完整的单词,但有时行很短,每个变量的用法也很少,所以不会造成伤害!即使是单字母变量,如果它们有明确的语义,有时也可以(如
x
y
作为坐标,或
i
j
作为索引)。
text = input('What is your sentence? ')  
counts = [0]*128

for character in text:
    counts[ord(character)] += 1

for index, count in enumerate(counts):
        if count >= 1:
            print(chr(index) * count)