阅读输入的问题

时间:2017-03-02 14:45:13

标签: python-3.x

 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}}

以上只是一个示例输出

1 个答案:

答案 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
>>>