目前的任务是建立一个基本的文本冒险。我遇到以下代码的问题。当前赋值仅使用函数,这就是赋值规则必须完成的方式。
def make_selections(response):
repeat = True
while repeat == True:
selection = raw_input('-> ')
for i, v in enumerate(response):
i +=1 # adds 1 to the index to make list indices correlate to a regular 1,2,3 style list
if selection == i:
print v[1]
else:
print "There's an error man, what are you doing?!?!?"
firstResponse = 'You chose option one.'
secondResponse = 'You chose option two.'
thirdResponse = 'You chose option three.'
responses = [(0, firstResponse), (1, secondResponse),( 0, thirdResponse)]
make_selections(responses)
我在该代码中的意图是,如果用户选择1
,它将返回firstResponse
,如果用户选择2
,它将返回secondResponse
等等。
我基本上只是对代码进行错误测试,以确保它产生适当的响应,因此"Error man..."
字符串,但由于某种原因,它只是循环错误消息而不打印相应的响应字符串。这是为什么?
我知道这段代码正在枚举元组列表,我可以正确调用它们,因为我可以将代码更改为以下内容并获得预期的输出:
for i, v in enumerate(response):
i += 1 # adds 1 to the index to make list indices correlate to a regular 1,2,3 style list
print i, v
此外,在任何人问之前有两个快速的旁边:
while
循环。在进入下一部分之前,我只是确保我的代码的每个部分都有效。这让我想到了元组。 答案 0 :(得分:1)
这里有一些问题。
首先,没有充分理由迭代所有数字只是为了看其中一个是否匹配selection
;您已经知道1 <= selection <= len(response)
会出现这种情况,然后您可以response[selection-1]
来获取v
。 (如果您对dict
有任何了解,那么您可能会看到更方便的方式来编写这一切......但如果没有,请不要担心它。)
但是,如果您真的想要进行详尽的搜索,那么在任何不匹配之后您都不应该打印There is an error man
,因为那样您将始终打印至少两次。相反,您只想在所有无法匹配时打印它。您可以通过跟踪匹配的&#34;来实现此目的。标记,或者在break
循环中使用else:
和for
子句,无论哪个更简单,但你必须做点什么。有关详细信息,请参阅教程中的break
and continue
Statements, and else
Clauses on Loops。
但最大的问题是raw_input
返回一个字符串,并且字符串永远不会等于一个数字。例如,在交互式口译员中尝试'1' == 1
,然后说False
。因此,您需要做的是将用户的输入转换为数字,以便进行比较。你可以这样做:
try:
selection = int(selection)
except ValueError:
print "That's not a number!"
continue
答案 1 :(得分:1)
似乎这是python中字典的工作。不确定你的作业是否允许这样做,但这是我的代码:
def make_selections(response):
selection = raw_input('-> ')
print response.get(selection, err_msg)
resp_dict = {
'1':'You chose option one.',
'2':'You chose option two.',
'3':'You chose option three.'
}
err_msg = 'Sorry, you must pick one of these choices: %s'%sorted(resp_dict.keys())
make_selections(resp_dict)
答案 2 :(得分:0)
问题是您正在将字符串与整数进行比较。选择是原始输入,因此它以str形式出现。将其转换为int,它将按预期进行评估。
您可以使用type(var)检查变量的类型。例如,输入后的打印类型(选择)将返回“str”类型。
def make_selections(response):
repeat = True
while repeat == True:
selection = raw_input('-> ')
for i, v in enumerate(response):
i +=1 # adds 1 to the index to make list indices correlate to a regular 1,2,3 style list
if int(selection) == i:
print v[1]
else:
print "There's an error man, what are you doing?!?!?"