使用字典的多行输入的If语句

2024-06-16 15:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

这个python问题让我有点麻烦,所以任务的第一部分基本上是从多行输入中读取数据,直到输入一个空行

如果第一个单词是“捕获”,那么它后面会有两个单词:神奇宝贝的名称(例如皮卡丘)和它的当前级别(例如5),所以它看起来像这样:“捕获皮卡丘5”

如果第一个单词是Query,那么下一个单词将是神奇宝贝的名字。您的程序应该打印您以前捕获的神奇宝贝的级别,或者如果它没有跟踪该神奇宝贝名称,它应该警告用户。例如,如果我之前键入“Capture Pikachu 5”,然后在下一行输入中写入“Query Pikachu”,它将返回“Pikachu为5级”。如果我写入“Query Eevee”而不是“Query Pikachu”,它将改为说“您尚未捕获Eevee”

如果我试图“捕获”一个已经捕获的神奇宝贝(例如,我写“捕获皮卡丘5”,然后在下一行写“捕获皮卡丘4”),它会说“你已经在训练皮卡丘了!”

最后,如果我输入除“捕获”和“查询”之外的任何未知命令,那么它将显示“未知命令!”

以下是我目前的代码:

while line:
  if 'Capture' in line:   
    parts = line.split()
    name = parts[1]
    number = parts[2]
    line = input('Command: ')
  elif 'Query' in line and parts[1] in line:
    print(name, 'is level', number + '.')
    line = input('Command: ')
  elif 'Capture' in line and parts[1] == name:
    part3 = line.split()
    notname2 = part3[1]
    print('You are already training', notname2 + '!')
    line = input('Command: ')
  elif 'Query' in line and parts[1] not in line:
    part2 = line.split()
    notname = part2[1]
    print('You have not captured', notname, 'yet.')
    line = input('Command: ')
  else:
    print('Unknown command!')
    line = input('Command: ')

除了当你试图捕获一个已经被捕获的神奇宝贝时,一切似乎都正常。例如,如果我写了“Capture Eevee 3”,然后写了“Capture Eevee 5”,我希望它说“你已经在训练Eevee了!”但它什么也没说,只是要求输入下一行内容

我没有在我的代码中使用dictionary函数,但在其他情况下成功地使其工作,但我可能在某个时候不得不使用它,我只是不知道如何实现它

我不太确定我的代码中的问题是什么,因为其他一切似乎都工作得很好,任何帮助都将不胜感激。谢谢!:)


Tags: 代码nameininputlinequery单词command
3条回答

不要直接在冷页上编程:用适合你的图表(例如流程图)设计你的逻辑流程,并从中编码。您编写的代码将不会到达识别先前口袋妖怪的子句,因为您在第一个子句中有一个包含条件。任何Capture都将通过第一个if块,而不管输入行上还有什么

试着做一个决策树:你的if "Capture" ...块中,立即检查你是否有那个口袋妖怪:

if "Capture" in line:
    parts = line.split()
    name = parts[1]
    if name ...     # if the name is already seen, print error message

您将需要对“查询”检查执行同样的操作

请注意,我没有修复您的“重新捕获”行,因为您没有正确跟踪您已经捕获的口袋妖怪角色。如果您发布的代码传递到较低的分支,它将失败或工作不正确,因为您没有正确地为这些其他分支定义partsname


停止尝试一次编写整个程序;您已经犯了足够多的错误,必须一次修复几个错误才能获得预期的输出。相反,先编写一个简单的if语句;在添加任何逻辑之前,请确保该选项有效(例如,可以区分命令)然后添加识别重新捕获的内容

是的,如果你使用dict,它会更容易

Pokedex={} #or bag ={}

在您的实际代码中,如果您使用类似{pokemon:lvl}的dict,您无法知道捕获了哪个口袋妖怪 范例

Pokedex["Eevee"]=3

因此,您可以检查Eevee是否存在,代码如下:

if pokename in Pokedex.keys(): 
    print("you have a " + pokename + "in your bag") 
else: 
    print("Adding a "+pokename+ " in your pokedex")
    Pokedex[pokename]=pokelvl

我刚刚给你写了这封信,应该可以很好地工作

done = False
owned_poks = []
poks_levels = []
while not done:
    line = input('Command: ')
    if line:
        parts = line.split()
        if parts[0] == 'Capture' and not parts[1] in owned_poks:
            owned_poks.append(parts[1])
            poks_levels.append(parts[2])
            print('Captured!')
        elif parts[0] == 'Query' and parts[1] in owned_poks:
            print('{} is level {}'.format(parts[1], poks_levels[owned_poks.index(parts[1])]))
        elif parts[0] == 'Capture' and parts[1] in owned_poks:
            print('You already have this pokemon')
        elif parts[0] == 'Query' and not parts[1] in owned_poks:
            print('you dont have this poke')
        else:
            print('Unkown command')
    else:
        done = True

相关问题 更多 >