2016-12-24 14 views
1

現在、数値を求める関数を作成しようとしています。 raw_input()関数を使用して入力を取得する予定です。私はPythonでそれを入力し、それを実行した場合、このプログラムは動作しますが、私はPowerShellでそれを実行すると、私は次のエラーが表示されますPythonプログラムはIDLEで動作しますが、コマンドライン(PowerShell)では動作しません

>>> python ex19.1.py 
What is your number? 34 
Traceback (most recent call last): 
    File "ex19.1.py", line 13, in <module> 
    is_prime(number) 
    File "ex19.1.py", line 5, in is_prime 
    if n % 2 == 0 and n > 2: 
TypeError: not all arguments converted during string formatting 

私は現在のPython 2.7を実行している、と私は「なぜ私はわからないんだけど私は自分のコードで文字列フォーマッタを使用しないので、文字列エラーを受け取る。以下は私のプログラムに使用しているコード、ex19.1.pyです。

import math 

def is_prime(n): 
    if n % 2 == 0 and n > 2: 
     return False 
    for i in range(3, int(math.sqrt(n)) + 1, 2): 
      if n % i == 0: 
       return False 
    return True 

number = raw_input("What is your number? ") 
is_prime(number) 

私の質問は、なぜこのエラーが発生しているのですか、それを修正するために何ができますか?ありがとう!

答えて

3

number整数でなければなりません。しかし、raw_inputを使用して取得するものは文字列です。

だけintに変換:文字列の

number = int(raw_input("What is your number? ")) 

  • モジュロ演算は、フォーマット文字列と形式の引数と一緒に、文字列フォーマットのために使用されています。 n % 2は、文字列 "34"を整数2でフォーマットしようとします(フォーマット文字列 "34"で引数が不要な場合)。これがこの特定のエラーメッセージの理由です。
2

raw_inputから入力を取得すると、デフォルトでは文字列になります。このような

何か:

>>> n = "2" 
>>> n % 2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not all arguments converted during string formatting 

は、あなたの問題を解決するには、intにnをキャストして、あなたのコードは正常に動作します。このような

:あなたはそれを用いた演算の行動をコミットとして

try: 
    num = int(number) 
    is_prime(num) 
except ValueError as e: 
    #Some typechecking for integer if you do not like try..except 
    print ("Please enter an integer") 
関連する問題