2016-03-04 78 views
0

我想不通为什么我收到此错误:不支持的操作数类型(S)为+:“功能”和“廉政”

Traceback (most recent call last): 
    File "C:/Users/tyler/Desktop/PycharmProjects/Arcade Game/AttackDirectory.py", line 63, in <module> 
    ThiefPdmg = randint(lambda x: (round(x*0.75)), lambda x: (round(x*1.00)))(Thief['stats']['Attack']) 
    File "C:\Python27\lib\random.py", line 242, in randint 
    return self.randrange(a, b+1) 
    TypeError: unsupported operand type(s) for +: 'function' and 'int' 

我还在学习Python和我在一个游戏的战斗系统上工作。我敢肯定,这些代码很粗糙,所以如果你有任何方法让它变得不那么粗糙,并且可能工作得更好,我会接受建议。

import random 
import pygame 
from random import randint 
pygame.init() 

Thief = {'name' : 'Thief', 
     'Class' : 'Player', 
     'Sub-Class' : 'Thief', 
     'lvl' : 1, 
     'xp' : 0, 
     'lvlNext' : 25, 
     'Weak' : {'Lightning'}, 
     'Normal' : {'Shock' 
        'Burn' 
        'Water' 
        'Freeze'}, 
     'Resistance' : {'Ice' 
         'Fire'}, 
      'Null' : {'Poison'}, 
    'stats': {'Attack' : 6, 
       'Magic' : 6, 
       'Speed' : 5, 
       'HP' : 20, 
       'MP' : 40}} 

def ThiefLevelUp(): 
    while Thief['lvl'] < 50 and Thief['xp'] >= Thief['lvlNext'] : 
     Thief['lvl']+= 1 
     xp = Thief['xp'] - Thief['lvlNext'] 
     lvlNext = round(Thief['lvlNext'] * 1.5) 
     Thief['stats']['HP'] = Thief['stats']['HP'] + round(Thief['stats']['HP'] * .25) 


    print("Level Up!") 
    print('Level:', Thief['lvl']) 
    if Thief['xp'] < Thief['lvlNext']: 
     print('XP Needed:', Thief['xpNeeded']) 
    print('Exp:', Thief['xp']) 
    print('Strength:', Thief['stats']['PStrength']) 
    print('Prosperity:', Thief['stats']['PProsperity']) 
    print('Dexterity:', Thief['stats']['PDexterity']) 
    print('Vitality:', Thief['stats']['PVitality']) 
    print('Agility:', Thief['stats']['']) 

Imp = {'name' : 'Imp', 
    'Class' : 'Enemy', 
    'lvl' : 1, 
    'xp' : 0, 
    'lvlNext' : 25, 
    'Weak' : {'Lightning'}, 
    'Normal' : {'Fire', 
       'Ice', 
       'Poison', 
       'Freeze', 
       'Burn'}, 
    'Resistance' : {}, 
    'Null' : {}, 
    'stats' : {'Attack' : 8, 
       'Speed' : 5, 
       'HP' : 25, 
       'MP' : 40}} 

    ThiefPdmg = randint(lambda x: (round(x*0.75)), lambda x: (round(x*1.00)))(Thief['stats']['Attack']) 

    ThiefMdmg = randint(lambda x: (round(x*0.75)), lambda x: (round(x*1.00)))(Thief['stats']['Magic']) 

ThiefHP = Thief['stats']['HP'] 

ImpDMG = randint(lambda x: (round(x*0.75/Thief['lvl'] + 1, lambda x: (round(x*0.75/Thief['lvl'] + 1)))))(Imp['stats']['Attack']) 

ImpHP = Imp['stats']['HP'] 


def AtkMiss(): 
     if random.random > .25: 
    Attack() 

else: 
    print("You Missed!") 
    if random.random > .25: 
     ThiefHP - ImpDMG 
     ThiefHP = Thief['stats']['HP'] - ImpDMG 

def Attack(): 

    AttackerDMG = ThiefPdmg 



    print('You Attacked!') 

if Thief['stats']['Speed'] >= Imp['stats']['Speed']: 

ImpHP - ThiefPdmg 
ImpHP = Imp['stats']['HP'] - ThiefPdmg 

if random.random > .25: 
    ThiefHP - ImpDMG 
    ThiefHP = Thief['stats']['HP'] - ImpDMG 



if Imp['stats']['Speed'] > Thief['stats']['Speed'] : 

    ThiefHP - ImpDMG 
    print('Thief Took {} Damage!'.format(ImpDMG)) 

    if random.random > .25: 
     ImpHP - ThiefPdmg 
     print('Imp Took {} Damage!'.format(ThiefPdmg)) 

    else: 
     print('The Attack Missed!') 


if ImpHP <= 0: 
    print('{} Was Killed!'.format(Imp['name'])) 

if ThiefHP <= 0: 
    print('You Were Killed!') 


def command(): 

    cmd = raw_input('What Will You Do?') 

if 'Atk' in cmd: 
    AtkMiss() 

else: 
    Pass 

def Battle(): 

    Attackerhp = Thief['stats']['HP'] 

    Defenderhp = Imp['stats']['HP'] 

    print('An imp appeared!') 
    print('    ') 
    while Defenderhp and Attackerhp > 0: 
     command() 
     print('Your Health: {}'.format(ThiefHP)) 
     print('Enemies Health: {}'.format(ImpHP)) 

    if Defenderhp <= Defenderhp: 
     print('Took {} Damage!'.format(Enemy['name'], Dmg or Mdmg)) 

错误来自哪里?

回答

0

randint [1]函数期望将int数字作为参数传递。相反,你正在传递看似不必要的lambda函数。例如,而不是randint(lambda x: round(x*0.25), lambda x: round(x*0.75)),只需要randint(round(x*0.25), round(x*0.75))即可。只有在需要传递function的东西时才使用lambda,就像回调一样。

  1. https://docs.python.org/2/library/random.html#random.randint
+0

好感谢您的帮助 –

+0

如果你的作品,请标明答案。干杯。 – haliphax

+0

好的,我会在早上检查它,如果它有效我会告诉你,我会标记答案 –

相关问题