while True:
d=input()
data=d.split(":",2)
if d.strip()=='':
break
这是我用来从keyboard.suppose读取数据的代码,输入是:
Williams:Muguruza:3-6,6-3,6-3
我的预期输出为['Williams','Murguza','3-6,6-3,6-3']
。但我得到的输出是''
(当我使用print(d)
时)。为什么我会得到这个。我在使用while循环因为用户提供连续输入和输入由空行终止
编辑:抱歉信息不完整。输入内容如下:
Djokovic:Murray:7-6,4-6,7-6,2-6,6-2
Murray:Djokovic:7-5,7-5
Williams:Muguruza:3-6,6-3,6-3
我必须阅读所有输入,最后当用户提供空白行(按两次ENTER键)时,它是输入的结束。对于每个输入,我必须提取一些信息,如data
和其他一些东西我正在给出完整的代码:
while True:
d=input()
if d.strip()=='':
break
data=d.split(":",2)
try:
b=isinstance(playerstats,dict)
except NameError:
playerstats={}
if data[0] not in playerstats:
playerstats[data[0]]={}
playerstats[data[0]]["5setswon"]=0
playerstats[data[0]]["3setswon"]=0
playerstats[data[0]]["setswon"]=0
playerstats[data[0]]["gameswon"]=0
playerstats[data[0]]["setslost"]=0
playerstats[data[0]]["gameslost"]=0
playerstats[data[0]]
if data[1] not in playerstats:
playerstats[data[1]]={}
playerstats[data[1]]["5setswon"]=0
playerstats[data[1]]["3setswon"]=0
playerstats[data[1]]["setswon"]=0
playerstats[data[1]]["gameswon"]=0
playerstats[data[1]]["setslost"]=0
playerstats[data[1]]["gameslost"]=0
if data[2].count("-")>3:
playerstats[data[0]]["5setswon"]+=1
else:
playerstats[data[0]]["3setswon"]+=1
p1=data[2][::4]
p2=data[2][2::4]
setswon=sum(x>y for x,y in zip(p1,p2))
setslost=data[2].count("-")-setswon
playerstats[data[0]]["setswon"]+=setswon
playerstats[data[0]]["setslost"]+=setslost
playerstats[data[1]]["setswon"]+=setslost
playerstats[data[1]]["setslost"]+=setswon
gameswon=sum(int(x) for x in p1)
playerstats[data[0]]["gameswon"]+=gameswon
playerstats[data[1]]["gameslost"]+=gameswon
gameslost=sum(int(x) for x in p2)
playerstats[data[0]]["gameslost"]+=gameslost
playerstats[data[1]]["gameswon"]+=gameslost
我的代码的主题是为每个玩家维护一个字典,其中包含丢失游戏等信息。但是我收到的错误是这样的:
Traceback (most recent call last):
File "<pyshell#2>", line 29, in <module>
if data[2].count("-")>3:
IndexError: list index out of range
我希望我用来读取用户输入的代码是错误的。但我真的不知道我哪里出错了。我应该得到的最终输出是:
{'Williams': {'5setswon': 0, '3setswon': 1, 'setswon': 2, 'gameswon': 0, 'setslost': 0, 'gameslost': 0}, 'Muguruza': {'5setswon': 0, '3setswon': 0, 'setswon': 0, 'gameswon': 0, 'setslost': 0, 'gameslost': 0}}
以上只是一个示例输出
答案 0 :(得分:0)
您的代码未明确指出您在循环中尝试print(d)
的位置。以下示例似乎可以满足您的要求。它演示了与解释器的交互式会话。
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> while True:
text = input().strip()
if not text:
break
data = text.split(':', 2)
print(data)
Williams:Muguruza:3-6,6-3,6-3
['Williams', 'Muguruza', '3-6,6-3,6-3']
Traceback (most recent call last):
File "<pyshell#7>", line 2, in <module>
text = input().strip()
KeyboardInterrupt
>>>