语法问题 - if / else和raw_input()

时间:2010-07-16 19:21:31

标签: python

好的,答案可能很明显,但我不知道让程序根据用户输入的内容做出不同反应的正确方法。

octopusList = {"first": ["red", "white"],
            "second": ["green", "blue", "red"],
            "third": ["green", "blue", "red"]}
squidList = ["first", "second", "third"]

squid = random.choice(squidList)
octopus = random.choice(octopusList[squid])
列表和鱿鱼和章鱼生成一个随机短语
resp = raw_input("Please Type Something")
while resp !=1:
    if resp == octopusList:
        print squid + " " +octopus
        break
    elif resp == "Something":
        print "Elephants are pachyderms"
        break
    else:
        print "That's another text to think about."
        break

print "One More Comment"
如果用户在octopusList上输入任何内容,则应该打印squid +“”+章鱼。或者,如果用户键入“Something”,则应返回短语“Elephants are pachyderms”。如果用户输入任何esle,它应该返回短语“那是要考虑的另一个文本”。最后它应该打印“One More Comment”。无论用户输入什么类型,它实际上做的是跳过海峡。

它与Else相关,所以有一些我没有得到关于if和elif的东西......感谢你能发光的任何光线。

3 个答案:

答案 0 :(得分:3)

编辑:在Ned Batchelder格式化代码之后,我重新阅读了这个问题并看到我对你想要做什么的猜测不太正确......尽管如果你想要的话仍然不是100%清楚循环与否。如果您只想完成一次,则不需要while循环,只需将其删除即可。至于对dictionary中名为octopusList的值的输入测试,你可以使用in test,但只测试dict的键。如果你正在寻找dict条目中的值,你必须要使octopusList成为一个真正的列表(例如octopusList = ['red', 'white', 'blue', 'green']并进行测试(例如if resp in octopusList:)或者让它变得更复杂一些解析词典。

原始答案: 您似乎正在尝试创建一个循环来获取用户输入并打印一个字符串以响应该输入。如果是这种情况,我会看到一些需要纠正的事情:

  • 您不需要break语句,因为它们会导致循环退出。
  • 正如其他人所说,将输入与octopusList进行比较是行不通的,只需将其与随机生成的章鱼值进行比较。
  • 如果您要使用1作为退出输入,则需要根据字符串形式('1')测试输入,而不是整数形式(1)。
  • 如果我的猜测是正确的,那么raw_input需要在循环中。

这不是标记的家庭作业,所以我发布了代码来做我认为你想要的东西。如果您希望用户不知道章鱼值,只需删除print octopus行,但我将其放入,以便您知道输入什么值进行测试。

import random
octopusList = {"first": ["red", "white"],
            "second": ["green", "blue", "red"],
            "third": ["green", "blue", "red"]}
squidList = ["first", "second", "third"]

squid = random.choice(squidList)
octopus = random.choice(octopusList[squid])
print octopus # So we know what value to use - necessary for testing at least
resp = ''
while resp != '1':
    resp = raw_input("Please Type Something: ")
    if resp == octopus:
        print squid + " " +octopus
    elif resp == "Something":
        print "Elephants are pachyderms"
    else:
        print "That's another text to think about."
    print "One More Comment"

如果我的推测和建议没有标记,请提供更好的解释,说明你正在尝试做什么。

答案 1 :(得分:1)

将字符串与字典进行比较并没有做任何有用的事情(它总是错误的,IIRC) - 您是否想要“if resp in octopusList”?我不确定为什么第二个条件永远不会命中,也许你输入“某事”而不是“Something”?

答案 2 :(得分:0)

您正在将字符串(resp)与列表进行比较。你想要这样的东西:

if resp == octopus:  # not octopusList!
    # do something
else:
    # ...