Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在用户输入中识别名称(来自文本文件),然后打印名称pt.2_Python_Text Files - Fatal编程技术网

Python 如何在用户输入中识别名称(来自文本文件),然后打印名称pt.2

Python 如何在用户输入中识别名称(来自文本文件),然后打印名称pt.2,python,text-files,Python,Text Files,我被要求提供我在运行代码时遇到的问题(错误的输出),下面是关于我试图用这个程序归档的问题/额外解释 假设文本文件(我的数据库)是完全空的,直到现在用户还没有提供任何信息(就像你在开始时从未提到有兄弟姐妹一样)。因此,当您输入关键字a brother/brother时(我还没有时间实现sister)。聊天机器人会检查数据库(此时数据库还是空的)和字典: brother_status = dict([ ('name', ''), ('nickname', ''), ('cur

我被要求提供我在运行代码时遇到的问题(错误的输出),下面是关于我试图用这个程序归档的问题/额外解释

假设文本文件(我的数据库)是完全空的,直到现在用户还没有提供任何信息(就像你在开始时从未提到有兄弟姐妹一样)。因此,当您输入关键字a brother/brother时(我还没有时间实现sister)。聊天机器人会检查数据库(此时数据库还是空的)和字典:

brother_status = dict([
    ('name', ''),
    ('nickname', ''),
    ('current age', ''),
    ('relationship', '')])
并返回此打印/原始输入以输入其名称:

what type of sibling do you have: brother
You never mentioned a brother. What's his name?
What's his name: James
聊天机器人然后将这个名字添加到brother_status[name]/文本文件中,但在它试图通过让你重复你所说的关于你兄弟(James)的话来继续对话之后。打印(“哦,你哥哥的名字是“+line.split(':')[1]*1)(来自上面的代码)也会打印,因为文本文件不再是空的,而且用户提到了詹姆斯的名字

I'll make sure to remember that, so what about James?
Oh, so your brother's name is James
但是我想(“哦,你哥哥的名字是”+line.split(“:”)[1]*1)只在用户先提到这个名字的情况下打印/如果文本文件不是空的,并且你已经提供了关于你哥哥/姐姐的信息

what type of sibling do you have: James
Oh, so your brother's name is James 
因此,我决定进行一些调整,将代码与主程序分离,并使其仅在用户输入长度大于1时打印(例如,如果我说“James很烦人”或“我受不了James”,那么它将打印),以避免以前出现的问题,但随后我用其他东西对其进行了测试:

Please enter brother's name: J is annoying
Oh, so your brother's name is James 

Please enter brother's name: I can't stand J
Oh, so your brother's name is James

Please enter brother's name: m is annoying 
Oh, so your brother's name is James 
Oh, so your brother's name is James (Yes, it repeats itself)
当用户使用该名称时,如何使其仅打印

单独的代码,我用它来解决这个问题(我上一个问题的原文):

(很抱歉使用了Python 2,我还没有学习Python 3)


(如果Python3更容易解决我的问题,我不介意你修改它)

为什么你在使用类似的测试语句时仍然得到响应

J很烦人

原因是:

 if words in word:
检查它与什么匹配。对于这种特殊情况,james中会出现字母j,因此bot会找到某种匹配,并返回名称

您可以将“in”替换为“==”,强制它进行完全匹配。
但在这种情况下,你也应该将所有大写字母转换为小写字母,否则它们将不匹配。

@ShadowMitia-这是我遇到的所有问题。我不确定你为什么要就同一件事提出第二个问题,所以我将继续回答第一个问题。理想情况下,每个问题都应该彼此无关,所以第2部分没有真正意义^^^^并且不要担心python3,首先关注您的问题,一旦问题解决,您就可以将代码更改为python3。@ShadowMitia哦,对不起,我对这一点很陌生,将来也不会这么做。在我向你寻求帮助后,我会删除这个,但是我如何转换它呢?我用的是什么特别的东西吗?我对Python@márciocelhot还是相当陌生的,没关系。只要试着把word:中的if words替换成
if words==word:
就行了,看看它是否能像你想的那样工作。我会试试,然后再给你回复
 if words in word: