2016-08-29 21 views
-1

私は関数のパラメータに数学記号を追加する方法があるかどうかを知りたいと思います。Python関数パラメータの数学記号は?

def math(x, y, symbol): 
     answer = x 'symbol' y 
     return answer 

これは私が意味する小さな例です。 EDIT

:ここ は、私は回数が、関数を呼び出す必要が問題全体

def code_message(str_val, str_val2, symbol1, symbol2): 
    for char in str_val: 

     while char.isalpha() == True: 
      code = int(ord(char)) 
      if code < ord('Z'): 
       code symbol1= key 
       str_val2 += str(chr(code)) 
      elif code > ord('z'): 
       code symbol1= key 
       str_val2 += str(chr(code)) 
      elif code > ord('A'): 
       code symbol2= key 
       str_val2 += str(chr(code)) 
      elif code < ord('a'): 
       code symbol2= key 
       str_val2 += str(chr(code)) 
      break 
     if char.isalpha() == False: 
      str_val2 += char 
    return str_val2 

です時には最初のシンボルのための+/-と、第2のシンボルのための+/-と

オリジナルコード:

def code_message(str_val, str_val2): 
    for char in str_val: 

     while char.isalpha() == True: 
      code = int(ord(char)) 
      if code < ord('Z'): 
       code -= key 
       str_val2 += str(chr(code)) 
      elif code > ord('z'): 
       code -= key 
       str_val2 += str(chr(code)) 
      elif code > ord('A'): 
       code += key 
       str_val2 += str(chr(code)) 
      elif code < ord('a'): 
       code += key 
       str_val2 += str(chr(code)) 
      break 
     if char.isalpha() == False: 
      str_val2 += char 
    return str_val2 
+1

申し訳ありませんが、あなたは手の込んだことができもう少し –

+0

もしかして '答え= X「記号」y':以下の例を見てください? –

答えて

2

あなたは関数にオペレータを渡すことはできませんが、しかし、あなたはoperatorライブラリで定義されたオペレータの機能を渡すことができます。

>>> from operator import eq, add, sub 
>>> def magic(left, op, right): 
...  return op(left, right) 
... 

# To Add 
>>> magic(3, add, 5) 
8 
# To Subtract 
>>> magic(3, sub, 5) 
-2 
# To check equality 
>>> magic(3, eq, 3) 
True 

mathは、デフォルトのPythonライブラリであり、それは良くないので、私はmagicの代わりmathとしての機能を使用していますので、あなたの関数は次のようになります定義済みのキーワードを使用するように練習します。

+0

この回答がありがとうございました! –

1

から、対応する機能を使用しモジュール:あなたが関数に数学記号を渡すことができ

from operator import add 
def math(x, y, add): 
     answer = add(x, y) 
     return answer 

唯一の方法は、通過している、あなたは同様の符号と式を評価し、二つの問題があるんだけど、文字列モードです。だからあなたが数字を扱っているときは、適切な機能を使って仕事を直接行うのがよいでしょう。

また、対応する関数にシンボルをマッピングするために辞書を使用することができます。

from operator import add, sub, mul 
mapping = {"+": add, "-":sub, "*": mul} 
def math(x, y, sym): 
    try: 
     f = mapping[sym] 
    except KeyError: 
     raise Exception("Enter a valid operator") 
    else: 
     answer = f(x, y) 
     return answer 
+2

そして 'add(x、y)= answer'は構文エラーですか? –

+0

'answer = add(x、y)' –

+0

@AnttiHaapalaちょうど、過去の間違いをコピー! – Kasramvd

0

まず、answer = x symbol yを使用しなければならないと考えてください。

シンボルの使用に関しては、関数をパラメータとして送信することができます。 基本オペレータの場合、operatorモジュールを使用することができます。例えば

import operator 

def math(x, y, function): 
     return function(x, y) 

math(4,5, operator.sub) 

あなたは、ドキュメントに必要な他のすべての操作があります。

0

私は驚いています。eval()です。

def function(operator1, operator2, symbol): 
    return eval(str(operator1) + symbol + str(operator2)) 

print(function(2, 3, '+'))  # prints: 5 
print(function(2, 3, '-'))  # prints: -1 

# Of course you can also "chain" operations, e.g., for 4 + 5 - 6 
result = function(function(4, 5, '+'), 6, '-') 
print(result)     # prints 3 

# Finally, it also works with string input for the operands so you 
# can read them directly from e.g., user input with `input()` 
print(function('2', '3', '+')) # prints: 5 
+0

'eval'は、プログラムで使用することは決して推奨されない関数です。それは動作しますが、推奨されません。実際、私によれば、「eval」機能はいつでもウイルスに変わる可能性があり、何が間違っているのかわからないでしょう。 –

+0

@MoinuddinQuadri「大きな力が大きな責任をもっている」と私のコメントです。 –

関連する問題