-2

Python に問題があります。これが私のコードです。

http://pastebin.com/yRu5WGKd

アイテムまたはつるはしを選択すると、問題なく印刷されます。以下は印刷されません..助けてください!?!

注: 読みやすいので、pastebin も使用しました。

4

1 に答える 1

1

あなたの実際の間違いは 62 行目です。-if ItemType == 3 & ItemStr == 1:で始まる必要があります。elifそうしないと、(本当に厄介な) if-cascade が壊れます。

もう 1 つの潜在的な問題: すべての比較で、つまり、論理 AND ( ) を使用する必要があるときに、if ItemType == 1 & ItemStr == 1:ビットごとの AND ( ) を使用しています。&and

こちらが書き直したバージョンです。長さは半分以下で、データ駆動型であり、矛盾を見つけやすくなっています (素材の種類で「ダイヤモンド」または「エメラルド」を意味していましたか?):

class Item(object):
    types = [
        ('Item',    'Item'),
        ('Pickaxe', 'ItemPickaxe'),
        ('Shovel',  'ItemSpade'),
        ('Axe',     'ItemAxe'),
        ('Hoe',     'ItemHoe'),
        ('Sword',   'ItemSword')
    ]
    strengths = [
        ('Diamond', 'EnumToolMaterial.EMERALD'),    # ?? You might want to doublecheck this...
        ('Gold',    'EnumToolMaterial.GOLD'),
        ('Iron',    'EnumToolMaterial.IRON'),
        ('Stone',   'EnumToolMaterial.STONE'),
        ('Wood',    'EnumToolMaterial.WOOD'),
    ]

    javastring = 'public static final {type} {name} = new {type}({id}, {strength}).setItemName("{name}");'

    @classmethod
    def prompt_for_item(cls):
        s = "Please enter your item's name:\n"
        name = raw_input(s).strip()

        types = ["[{}] {}".format(i,n[0]) for i,n in enumerate(cls.types, 1)]
        s = "Please enter item type:\n{}\n".format('\n'.join(types))
        type_ = int(raw_input(s)) - 1

        s = "Please enter item id (unique int):\n"
        id = int(raw_input(s))

        strengths = ["[{}] {}".format(i,n[0]) for i,n in enumerate(cls.strengths, 1)]
        s = "Please enter item strength:\n{}\n".format('\n'.join(strengths))
        strength = int(raw_input(s)) - 1

        return cls(name, type_, id, strength)

    def __init__(self, name, type_, id, strength):
        self.name = name
        self.type = type_
        self.id = id
        self.strength = strength

    def write_to_file(self, fname=None):
        if fname is None:
            fname = '{}.java'.format(self.name)
        with open(fname, 'w') as outf:
            cls = type(self)
            outf.write(
                cls.javastring.format(
                    type = cls.types[self.type][1],
                    name = self.name,
                    id = self.id,
                    strength = cls.strengths[self.strength][1]
                )
            )

def main():
    it = Item.prompt_for_item()
    it.write_to_file()
    print 'File has been written'

if __name__=="__main__":
    main()
于 2012-07-13T17:13:58.720 に答える