2017-03-02 68 views
1
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))。爲什麼我會得到this.Here我使用while循環,因爲用戶提供連續輸入和輸入由空行終止

編輯:對不起,我不完全information.The投入將是這樣的:

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鍵兩次)它是input.For的端部的每個輸入我要提取一些信息,如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 

我的代碼的主旋律是保持一個字典爲每個球員像場失利etc..But我收到錯誤這樣一些信息:

Traceback (most recent call last): 
File "<pyshell#2>", line 29, in <module> 
if data[2].count("-")>3: 
IndexError: list index out of range 

我希望我用來讀取用戶輸入的代碼wrong.But我真的不知道我要去的地方wrong.The最終輸出什麼,我應該得到的是:

{'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

您的代碼沒有清楚地指明您要在循環中嘗試使用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 
>>>