尝试创建 python 程序,但使用 def 进行了简化

Trying to create python program, but simplified with def

我正在尝试创建一个程序而不导入任何东西。该程序让用户输入一段话,然后打印消息中有多少个 A,多少个 B,等等。 所以它有效......它只是很长。我是编码新手,我知道有一种方法可以使用 def 简化下面的代码,但我不太确定如何。有人可以帮忙吗?

你不需要任何方法,但你绝对可以缩短它:

  • 字符串可以用作字符数组
  • 您可以使用 index 方法来确定字母 在字母表中的位置。
  • 您可以迭代压缩列表 字母表和计数器列表中的对,以生成输出。
  • 使用if letter in alphabet作为守卫以确保字母对于字母表有效,而不是对字母表进行硬编码。这样您甚至可以 扩展您的字母表 。 (注意,计数器设置为字母表的长度)。

这里有一个建议:

message = input('what is your message? ').upper()
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
counter = [0] * len(alphabet)

for letter in message:
    if letter in alphabet:
        counter[alphabet.index(letter)] += 1

for letter, count in zip(alphabet, counter):
    print(letter, ':', count)

一个人可以用一行指令来完成,我们利用:

  • count字符串的方法returns一个字符串中包含的元素个数
  • chr 函数从 int 中给出一个字符。 chr(65) 给出一个 Achr(66) 给出一个 B,...
  • join 连接列表字符串的函数

结果看起来像

message = input('what is your message? ').upper()
print('\n'.join([chr(65+i)+':'+str(message.count(chr(65+i))) for i in range(26)]))

对于一个非常简短和优雅的解决方案,使用 collections 模块中的 Counter 单元:

from collections import Counter

message=raw_input("what is your message?")
message=message.upper()

c = Counter(message)
print c.most_common()

这会计算邮件中的每一种字母。它甚至可以为您快速排序结果。这是一个示例对话框:

“你的消息是什么?你好,新 Pythonist!

[(' ', 3), ('E', 3), ('H', 3), ('T', 3), ('I', 2), ('N', 2), ('!', 1), (',', 1), ('O', 1), ('P', 1), ( 'S', 1), ('R', 1), ('W', 1), ('Y', 1)]"