我正在制作一个文本冒险游戏,作为我的学习Python书籍的一部分...无论如何这是我想要做的:
def is_a_song(song):
valid_sung_songs = ["song 1", "song 2", "song 3"]
valid_unsung_songs = ["s1", "s2", "s3"]
if song.lower() in valid_sung_songs:
return (True, 0)
elif song.lower() in valid_unsung_songs:
return (True, 1)
else:
return False
def favorite_song():
choice = raw_input("> ")
is_song, has_sung = is_a_song(choice)
if is_song and (has_sung == 0):
print "Good Song"
elif is_song and (has_sung == 1):
print "Good Song, But I haven't sung it"
else:
print "Not a valid song"
favorite_song()
现在这只是我实际使用的代码的缩减版本,但是当它运行时,它可以在歌曲有效和唱歌时工作,当它有效且无效时,它会在最后一个else语句中崩溃:
else:
print "Not a valid song"
错误:
TypeError: 'bool' object is not iterable
如果您想要我正在使用的实际代码,请访问:
答案 0 :(得分:4)
您需要在此处返回False, False
:
def is_a_song(song):
...
else:
return False, False
您调用此函数并尝试解压缩两个值:
我建议您将代码更改为:
if song.lower() in valid_sung_songs:
return True, False
elif song.lower() in valid_unsung_songs:
return True, True
else:
return False, False
后来这样做:
if is_song and not has_sung:
print "Good Song"
elif is_song and has_sung:
print "Good Song, But I haven't sung it"
else:
print "Not a valid song"
对我来说似乎更清洁。
is_song, has_sung = is_a_song(choice)