0

ここに私が書いたものがあります:

number = raw_input('Enter an integer= ')
if number < 0:
    print 'Invalid number'

else:
    for k in range(1,(number)):
        number *= k

print number

任意の数値 (0 より大きい) を入力できるようにしたいのですが、4 と言う数値を入力すると (4 の階乗は 24)、次のエラーが発生します。

Traceback (most recent call last):
  File "problem.py", line 6, in <module>
    for k in range(1,(number)):
TypeError: range() integer end argument expected, got str.

私はそれが何を意味するのか理解できません。私が知る限り、コードは機能するはずです。助けてください!

4

4 に答える 4

4

これは完全に機能します: factorial.py

#!/usr/bin/env python

# imports go here

__author__ = 'Michael O. Duffy'
__status__ = "Development"

def factorial(n):
    """ Calculate a factorial of an integer """
    factorial = 1
    if n < 0:
        print 'Invalid number'
    else:
        for k in range(1,n+1):
            factorial *= k
    return factorial

if __name__ == '__main__':

    for number in range(1, 20):
        print 'n: ', number, 'n!: ', factorial(number)

これは非効率的でアカデミックな実装であり、深刻なアプリケーションでは使用すべきではないことを知っておく必要があります。値を繰り返し使用する場合は、gammaまたは実装と辞書キャッシュを使用して計算を節約する方がはるかに優れています。lngamma

http://mathworld.wolfram.com/GammaFunction.html

于 2011-06-15T17:37:50.580 に答える
2

再帰はどうですか?

def factorial(n):
  if n < 0:
    print("ERROR!") # throw error, return -1, or whatever
  elif n <= 1:
    return 1
  else:
    return n * factorial(n - 1)
于 2011-06-16T08:06:49.117 に答える
1

raw_input整数ではなく文字列を返します。この方法で整数を作成します。

number = int(raw_input('Enter an integer= '))

ユーザーは整数以外の何かを入力する可能性があります。その場合、その可能性を処理したい場合があります。

while True:
    try:
        number = int(raw_input('Enter an integer= '))
    except ValueError:
        print "That wasn't an integer"
    else:
        break
于 2011-06-16T08:01:43.987 に答える