0

我在 Python 方面非常糟糕,我的计算机编程课程在两天后结束(感谢上帝),但我很难弄清楚什么可能是有史以来最简单的代码。

我的作业状态的说明,“编写一个程序,它以文本形式读取,直到出现'!' 找到。使用由字母“A”到“Z”下标的整数数组。”

从我到目前为止所做的事情来看:

msg = input("What is your message? ")

msg = msg.upper()

int_array = [0] * 26

for alph in range (65, 91):
    char = chr(alph)
    print(char)

(int_array[char])

任何帮助将不胜感激!谢谢!

编辑:这是完整的任务:

编写一个程序,从键盘读取文本,直到找到 ('!')。

使用由字母“A”到“Z”下标的整数数组,计算每个字母出现的次数(无论是大写还是小写)。在单独的计数器中,还计算“其他”字符('.'、'?'、''、'2' 等)的总数。

打印出找到的每个字母的计数。此外,打印非字母字符的计数。

通过检查数组,打印出元音的数量和辅音的数量。

打印出找到最多的字母。(请注意,可能有多个字母附有最大计数。)打印出找到最少次数的字母(或字母),但一定要排除根本没有找到的字母。

更新:

我的代码已经做到了这一点

msg = input("What is your message? ")

print ()

num_alpha = 26
int_array = [0] * num_alpha

for alpha in range(num_alpha):
    int_array[alpha] = chr(alpha + 65)
    print(int_array[alpha], end = "")

print()

lett = 0
otherch = 0
num_vowels = 0
num_consanants = 0

count_character = [0] * 100000

length = len(msg)

for character in msg.upper():
    if character == "!":
        print("lett =", lett)
        print("other char = ", otherch)
        print("num_vowels = ", num_vowels)
        print("num_consanants = ", num_consanants)
    elif character < "A" or letter > "Z":
        otherch = otherch + 1
        count_character[ord(character)] = count_character[ord(character)] + 1
    else:
        lett = lett + 1
        count_character[ord(character)] = count_character[ord(character)] + 1

for character in msg:
    print("character", character, "appeared" , count_character[ord(character)] , "times")

显然还没有完成,但是每次我打印最后一个打印语句时,它都会说每个字符出现 0 次。有人可以帮忙吗?

4

2 回答 2

2

您需要对此进行澄清,因为在 Python 中不存在“由字母 'A' 到 'Z' 下标的整数数组”这样的东西。

我能想到的可能解释:

  • 它应该是字典而不是数组。Python 字典类似于列表(Python 数据类型大致相当于其他语言中的“数组”),但它们可以以字符串为下标,而列表只能以整数为下标。这样,您可以存储一个与每个字母相关联的整数。这就是大多数 Python 程序员通常会这样做的方式。
  • 您应该使用并行列表。您可以通过制作两个包含 26 个元素的列表来做到这一点,一个包含字母“A”到“Z”,一个包含整数。对于每个字母,您可以使用该list.index方法在第一个列表中查找该字母所在的索引,然后在第二个列表中查找该索引。(理论上,您实际上并不需要第一个列表,因为 Python 字符串就像列表一样,它们可以用整数下标并支持该index方法。因此您可以使用字符串'ABCDEFGHIJKLMNOPQRSTUVWXYZ'而不是列表。或者您可以使用ord函数,这是函数的反chr函数。但我不知道你是否应该使用这些功能。)
于 2013-08-14T04:24:29.140 回答
2

我不能 100% 确定以下内容是否正确,因为我同意其他人的观点,即作业描述不可靠。它看起来像一个基于 C 的家庭作业,懒惰地移植到 Python。那说:

  • 原则上,我不会硬编码字母表的边界,而是使用ord('A')and ord('Z')+1,这样我就可以说类似alphabet = list(range(ord('A'), ord('Z')+1))

  • 重命名int_arraycounter可能会使您在内部循环中需要做的事情更加明显(请记住,您使用字母作为索引。或者更确切地说,您需要更像ord(letter)-ord('A')索引的东西)

  • 您不想遍历字母表;你想循环输入。

  • count应该初始化为[0]*27跟踪“其他”值。counter[-1]您可以为非字母字符递增。

  • 您的最终值为chr。你可能会觉得写一个循环counter.index(max(counter))更简单,或者你的老师可能会觉得更容易接受。for

于 2013-08-14T04:34:07.140 回答