首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ord()和chr()

Python ord()和chr()
EN

Stack Overflow用户
提问于 2021-03-31 13:56:59
回答 1查看 91关注 0票数 0

我有:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
))
111
3333
etc.

对于字符串"aB)a2a2a2)“,输出是正确的:

代码语言:javascript
复制
))
222
B
aaaa

对于字符串"aB)a2a2a2“,输出是错误的:

代码语言:javascript
复制
)
222
)
aaaa

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

EN

回答 1

Stack Overflow用户

发布于 2021-04-02 08:44:12

在执行list.index(x)时,您将在列表中搜索该值出现的第一个索引。但这实际上并不是您想要的,您想要的是您刚刚读取的值的特定索引,即使相同的值也出现在列表中较早的其他位置。

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

代码语言:javascript
复制
for i, x in enumerate(list):
    if x >= 1:
        print(chr(i) * x)

这应该会得到您想要的输出,但是还有其他几件事可以使您的代码更容易阅读和理解。首先,使用list作为变量名是一个非常糟糕的主意,因为这将在您的名称空间中隐藏内置list类型的名称。这使得任何阅读您的代码的人都非常困惑,如果您想要将普通的list用于某些目的而忘记已经将其用于您自己的变量,您甚至会感到困惑。

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

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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66882427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档