2011-04-10 16 views
-1

我有以下线在我的Python程序如何改变这一特定字符串成一定的输入

print "Player 1: " +str(player1points) 

其中“player1points”是计算在我的计划。

结果产量:

Player 1: 3 

,其中 '3' 是计算该运行什么程序。

然而,对于一个特定的功能我设法从这里

def sort_players(players): 
r"""Sort the players by points. 

>>> print sort_players('Player 1: 3\n' 
...     '\n' 
...     'Player 2: 4\n' 
...     '\n' 
...     'Player 3: 3\n' 
...     '\n' 
...     'Player 4: 5\n') 
Player 4: 5 
Player 2: 4 
Player 1: 3 
Player 3: 3 
""" 
# split into a list 
players = players.split("\n") 

# filter out empty lines 
players = [player for player in players if player != ''] 

def points(player_report): 
    """Parse the number of points won by a player from a player report. 

    A "player report" is a string like 'Player 2: 6'. 
    """ 
    import re 
    # Match the last string of digits in the passed report 
    points = re.search(r'\d+$', player_report).group() 
    return int(points) 

# Pass `points` as a "key function". 
# The list will be sorted based on the values it returns. 
players.sort(key=points, reverse=True) 

# Make the sorted list back into a string. 
return "\n".join(players) 

获得帮助的功能将只接受一个输入:

Player 1: 3 

,而不是:

"Player 1: " +str(player1points) 

即使在我看来,他们都产生相同的结果,我将如何能够转换

"Player 1: " +str(player1points) 

进入相应的输入,所以函数将接受它。

实例:

sort_players('Player 1: 3\n' 
      '\n' 
      'Player 2: 4\n' 
      '\n' 
      'Player 3: 3\n') 

能给我

Player 2: 4 
Player 1: 3 
Player 3: 3 

实施例2:

sort_payers('Player 1: +str(player1points)\n' 
      '\n' 
      'Player 2: +str(player2points)\n' 
      '\n' 
      'Player 3: +str(player3points)\n') 

能给我

AttributeError:'NoneType' object has no attribute 'group' 
+0

我怀疑这是问题所在。显示一些失败的完整示例(并包含完整的追溯和错误消息!),并且可以工作。 – delnan 2011-04-10 21:36:13

+0

我想你在调试代码的时候出错了。请提供更多细节实际发生的事情,你会得到什么错误......使用分割和正则表达式看起来不对,但需要更多细节来解释它。 – Achim 2011-04-10 21:37:38

+0

投票结束:不是一个真正的问题。请re =说明发布所有代码的问题。另外,如果这是作业,它应该被标记为这样。 – 2011-04-10 21:39:58

回答

0

您应该通常使用formatting strings而不是+运算符来连接python。我也不确定为什么要传递一个你已经拥有点值的字符串给一个提取点值的函数?

你可以尝试这样的事情(虽然我不知道为什么你有什么会失败。)

mystr = "Player 1: %d" % player1points 
print points(mystr) 
3
'Player 1: +str(player1points)\n' 

只是一个字符串,即使它包含的东西,可能是Python代码。谢天谢地,Python不会神奇地评估这一点。该字符串将被传递从字面上到函数。看看上面行的语法高亮和比较,这一点,这实际上增加了player1points字符串Player 1:

'Player 1: '+str(player1points)+'\n' 

你看,必须把str通话和+外字符串字面所以他们的意思任何东西给Python。 (而当你在它的时候,你可能想切换到字符串格式,即"Player 1: %d" % player1points"Player 1: {}".format(player1points)。)

错误消息特别是这一行造成的:

points = re.search(r'\d+$', player_report).group() 

因为没有什么是订单(仅"+str(player1points)")号样,re.search西港岛线返回None,而不是一个匹配的对象 - 和None显然没有按不了解任何关于团体的事情。

+0

你真了不起!这确实是个问题。由于这是一年级的计算机科学,所以我的教授没有向我们介绍你所建议的格式,但很高兴知道这一点。 :) – 2011-04-10 22:11:28

+1

+1耐心解释这样一个基本的东西 – eyquem 2011-04-10 22:45:33

0

排序(可迭代[,CMP [,键[,反向]]])

返回从在迭代的商品的新排序的列表 。

您的代码是划水池。但似乎你要处理的数据是一个字符串。所以,我做的:

ch = '''\ 
Player 1: 3 

Player 2: 4 

Player 3: 3 

Player 4: 5 
''' 
print ch 

import re 

pat = re.compile('(Player (\d+): (\d+))') 

print '------------' 
print '\n'.join(x[2] for x in 
       sorted((-int(points),number,report) 
         for (report, number, points) 
         in pat.findall(ch))) 

结果

Player 1: 3 

Player 2: 4 

Player 3: 3 

Player 4: 5 

------------ 
Player 4: 5 
Player 2: 4 
Player 1: 3 
Player 3: 3 

如果输入的数据不是一个字符串,解释这是什么,我会修改代码。

相关问题