0

这是一个家庭作业问题,它要求“选择一个单词。要求用户输入一个字母。检查该字母在您的单词中出现的次数并在屏幕上输出数字。” 到目前为止,我已经按原样编写了它,它似乎工作正常:

word = str("python")
letters = len(word)
attempt = str(raw_input ("Enter a letter: "))

while attempt in word:
    count = "python".count(attempt)
    if attempt in word:
                    print "This letter is present ",count, "time(s)."
    attempt = str(raw_input ("Enter another letter: "))

while attempt not in word:
    attempt = str(raw_input ("This letter is not present, enter another letter: "))
    count = "python".count(attempt)
    if attempt in word:
             print "This letter is present ",count, "time(s)."

但有时如果我输入字母,程序会停止并且不再接受任何输入。我究竟做错了什么?如果代码非常草率且写得不好,我深表歉意,因为我是编程新手。谢谢。

4

2 回答 2

5

我不确定这是否是您的意思,但是您的 while 循环将一个接一个地执行。它们并非一直都适用。因此,第一个 while 意味着“只要用户输入单词中的字母,就继续执行此操作”,并且只要用户在单词中输入字母,该循环就会继续执行。一旦用户输入了一个不在单词中的字母,循环将结束,事情将进入第二个循环。执行永远不会回到第一个循环。同样,在第二个循环中,如果您随后输入单词中的字母,循环将结束。由于这是程序的结束,程序将结束。

因此,如果您输入一个不在单词中的字母,然后输入一个在单词中的字母,程序将结束。就像你先输入“x”然后输入“y”,它就会停止。

我认为你真正想要的更像是:

while True:
    attempt = raw_input("Enter a letter:")
    if attempt in word:
        print "That was in the word", word.count(attempt), "times"
    else:
        print "That was not in the word"

当然,这个程序会无限循环,直到你按下 Ctrl-Break 等关闭它。

您的代码还有其他一些问题。您不需要将“python”包装在 中str,因为它已经是一个字符串。您也不需要包装raw_input在字符串中,因为raw_input已经返回了一个字符串。您定义了一个名为letters但从不使用它的变量。

此外,您word = "python"在开始时定义,但有时稍后您使用该word变量,而其他时候您在代码中重新键入字符串“python”。对这个程序来说没关系,但一般来说,将变量赋值一次并在任何地方使用它是个好主意;否则,如果您决定使用不同的词,则必须在许多地方更改它,这会增加您忘记在一个地方更改它的可能性,从而导致错误。

最后,注意inandcount对子字符串进行操作,而不仅仅是单个字母。因此,输入“yth”作为您的输入仍然有效,并且计数为 1。这不一定有什么问题,但您应该知道,尽管您要求输入字母,但该人可以输入任何内容,并且子字符串仍然可以在“单词”中找到任何长度。

于 2012-09-18T02:42:35.550 回答
0

该程序是顺序的,有两个循环。一旦通过了这些循环,程序就结束了。

循环 1:在单词中找到输入时运行。

一旦这个条件失败,我们就会进入循环 2:

循环 2:在单词中找不到输入时运行。

一旦这个条件失败,我们就会进入程序的结尾。

因此,如果您输入一次“坏”输入,然后输入一次“好”输入,程序将结束。

您想要做的是将两个循环包装成一个,并使用 if-else 来确定每个特定输入是哪个。

于 2012-09-18T02:42:52.123 回答