我有一个程序,其中我使用input()
从STDIN获取输入。在
我使用输入从一行中读取第一个单词并将其用作字典键,随后的每个单词都添加到一个列表中,该列表是前面提到的键的值。在
输入在一个文件names.txt
:
Victor Bertha Amy Diane Erika Clare
Wyatt Diane Bertha Amy Clare Erika
Xavier Bertha Erika Clare Diane Amy
Yancey Amy Diane Clare Bertha Erika
Zeus Bertha Diane Amy Erika Clare
Amy Zeus Victor Wyatt Yancey Xavier
Bertha Xavier Wyatt Yancey Victor Zeus
Clare Wyatt Xavier Yancey Zeus Victor
Diane Victor Zeus Yancey Xavier Wyatt
Erika Yancey Wyatt Zeus Xavier Victor
例如,men["Victor"] = ["Bertha","Amy","Diane","Erika","Clare"]
。在
代码位于文件GS.py
(Gale Shapley的一个实现):
当在Windows上使用IDLE时,我只需粘贴这个文件的内容并按enter,它就可以工作了。在
但是使用Ubuntu,我可以python3 GS.py < names.txt
并且我得到这样的结果:
me@glados:~$ python3 GS.py < names.txt
['Victor Bertha Amy Diane Erika Clare']
['Victor', 'Bertha', 'Amy', 'Diane', 'Erika', 'Clare']
man
['Bertha', 'Amy', 'Diane', 'Erika', 'Clare']
Traceback (most recent call last):
File "GS.py", line 83, in <module>
if husband[w] == 0:
KeyError: 'Bertha'
(编辑)现在,当我这样做时,cat names.txt | python3 GS.py
我得到了:
ajg9132@glados:~$ cat names.txt | python GS.py
Traceback (most recent call last):
File "GS.py", line 50, in <module>
data = input("").split("\n")
File "<string>", line 1
Victor Bertha Amy Diane Erika Clare
^
SyntaxError: invalid syntax
我不知道该怎么办-对I/O一无所知。有什么帮助吗?在
编辑注意:我认为我给出的两个不同的bash命令是等价的,但是我又是一个十足的傻瓜,所以解释一下它们为什么不同也会有帮助。。。在
为了消除歧义,这是一个算法作业。。。(很遗憾,我了解算法,但不了解操作系统的底层细节),我需要有一个具体的输入和输出方案。e、 g
spock $ java GS
Victor Bertha Amy Diane Erika Clare
Wyatt Diane Bertha Amy Clare Erika
Xavier Bertha Erika Clare Diane Amy
Yancey Amy Diane Clare Bertha Erika
Zeus Bertha Diane Amy Erika Clare
Amy Zeus Victor Wyatt Yancey Xavier
Bertha Xavier Wyatt Yancey Victor Zeus
Clare Wyatt Xavier Yancey Zeus Victor
Diane Victor Zeus Yancey Xavier Wyatt
Erika Yancey Wyatt Zeus Xavier Victor
Victor Amy
Wyatt Clare
Xavier Bertha
Yancy Erika
Zeus Diane
spock $
我不这么做的唯一原因是,将几行文本粘贴到PuTTY中使bash尝试将每一行解释为一个命令。我简直无语了。在
input()
的含义已经改变。在在python3.2中:http://docs.python.org/py3k/library/functions.html#input
在python2.7.2中:http://docs.python.org/library/functions.html#input
您可以通过两个小的测试程序看到这一点。唯一的区别是一个使用Python 2.7解释器,另一个使用Python 3.2解释器:
请注意,即使python3.2版本没有抛出错误,它也没有像人们预期的那样打印
names.txt
中的所有行。在我认为} 方法代替:
^{pr2}$input()
方法不值得使用。Easier将使用新的^{(我删除了
names.txt
中的一个空白行,因为它导致这个简单的程序抛出一个错误。它实际上不会在你的成熟程序中成为一个问题,因为你正确地处理空白行。我无法解释为什么
input()
在Windows下工作,但是input()
感觉是一个非常糟糕的界面(谁认为通过eval
运行用户提供的输入是个好主意?!?希什)只是重写它。在更新
好吧,我有足够的兴趣来解决这个问题。我把你所有的调试代码都拿回来了,并改用了
for l in sys.stdin:
方法:请注意,如果以这种方式运行,则在粘贴完输入后,必须按
^D
。(我更喜欢IO重定向./GS.py < names.txt
,但如果你的教授会复制粘贴,那么请确保你的教授知道点击^D
来表示输入结束。)相关问题 更多 >
编程相关推荐