2017-02-25 3 views
0
base = (.75) 
hood = (.70) 
pipeAura = (.9) 
cloak = (.85) 
glimmer = (.85) 
null = (.78) 
heap = (.88) 
corrosive = (.75) 
spiritBear = (.67) 
spellShield = (.5) 
berserkersBlood = (.5) 
pipe = hood * pipeAura 
antimage = spellShield * base 
viper = corrosive * base 
huksar = berserkersBlood * base 
meepo = (.65) * base 
veil = (1.25) 
pudge = heap * base 

input1 = input('What hero are you trying to kill?(antimage, viper, huskar, meepo, pudge)') 
input2 = input('What item is the hero holding/using/affected by? (hood, pipeAura, cloak, glimmer, pipe, veil)') 
input3 = input('is the hero affected by null field? (yes/no)') 
userHealth = input("what is the hero's current hp?") 

if input3 == null: 
    null = (.78) 
else: 
    null = 1 

magicResist = (1 - (input1) * (input2) * (null)) 

これらの名前の多くは、あなたの多くに意味を持たないかもしれないという考えが、私は入力を与え終えたときに私の問題があり、それは私にエラーを与えるの文脈」magicResistとして受信します型エラー:型 'str'の非intでシーケンスを掛けることができません "私はこれに助けが必要です、なぜ私はそれらが文字列を考慮するのだろうかと思っていますが、すべての入力が定義された変数で浮動小数点にトレースバックしても入力は常に「STR」

+0

'null'?そして、 'input'は常に' str'を返します。 'float(..) 'を使ってfloatに変換することができます。 –

+0

私はコードの最後の行を変更することでこれを行おうとしましたが、magicResist =(1 - float(input1)* float(input2)*(null))、変数であってもfloatに変換できませんこれはフロートを表します。正確なエラー:ValueError:stringをfloatに変換できませんでした: 'antimage' –

+0

@ZachI: 'input3'を' if'ステートメントでfloatに変換する必要があります: 'if float(input3)== null:' ... –

答えて

0

入力はpython2から文字列を返します。このraw_inputが文字列を返す前に、入力は評価された値を返しました。 入力を評価するには、入力と評価を組み合わせることができます。

inputN = eval(input("message...")) 

しかし、特定の値やセキュリティ上の理由から、evalに渡されるローカルとグローバルを設定する必要があります。

+2

Nooooooo !!!! 'eval(..)を使わないでください。これは非常に安全です... –

+0

グローバルとローカルを指定しない限り、安全ではありません。上の変数のdictを使って、それをグローバル変数として渡してください。 - 'help(eval)'を参照してください。 – cmdLP

+0

これは問題ではありません。問題は、ここでは、ハッカーが任意のコードを実行できるため、プログラムに完全にアクセスできるようにすることです。例えば、ユーザがミスタイプして 'list = 4'と言うとどうなるでしょうか?これからプログラムは 'list(..)'コンストラクタを呼び出すことはできません。他の選択肢がない限り(そして、あなたはしばらくの間、代替案を探しています)、** eval(..)を使用しないでください。 –

0

入力は文字列を返します。

# [...] 
antimage = spellShield * base 
viper = corrosive * base 
# [...] 
heroes = { 
    'antimage': antimage, 
    'viper': viper, 
    # and so on 
} 
input1 = input('What hero are you trying to kill?(antimage, viper, huskar, meepo, pudge)') 
hero = heroes.get(hero, 1) # I specify 1 as the default if the key is not present in the dictionary, you might specify a more suitable value 

の操作を行います。あなたは、ユーザーが(ヒーローやアイテムの名前になり、あなたの例では)文字列を入力し、あなたが前に計算され、適切な値を使用したいしたい場合は、辞書を使用する場合がありますアイテムについても同じことができ、変数を使用して結果を計算することができます:

magicResist = (1 - hero * item * null) 
関連する問題