在Python中订阅整数数组?

时间:2013-08-14 04:05:38

标签: python arrays list subscript

我在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次。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

你需要对此进行澄清,因为在Python中没有“由'A'到'Z'字母下标的整数数组。

我能想到的可能的解释:

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

答案 1 :(得分:2)

我不是百分百肯定以下是正确的,因为我同意其他人认为作业说明不合适。它看起来像一个基于C的家庭作业,懒洋洋地移植到Python。那说:

  • 原则上而不是硬编码字母表的边界我会选择ord('A')ord('Z')+1,以便我可以说alphabet = list(range(ord('A'), ord('Z')+1))

    < / LI>
  • int_array重命名为counter可能会使您在内循环中需要做的更明显(请记住,您使用字母作为索引。或者更确切地说,你需要更像ord(letter)-ord('A')作为你的指数的东西)

  • 你不想循环使用字母表;你想循环输入。

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

  • 您的最终价值是chr的{​​{1}}。你可能会发现它更直接,或者你的老师可能会发现它更容易接受,只需写一个counter.index(max(counter))循环。