2017-05-26 7 views
0

で道のタプルの仕事についての質問、私はMIT OCWのはじめからコンピュータサイエンスとプログラミングにこの問題をしていた。カップルだから、Pythonの

Problem #2 
Implement the compute_deriv function. This function computes the derivative 
of a polynomial function. It takes in a tuple of numbers poly and returns 
the derivative, which is also a polynomial represented by a tuple. 

def compute_deriv(poly): 

""" 
Computes and returns the derivative of a polynomial function. If the 

derivative is 0, returns (0.0,). 

Example: 

>>> poly = (-13.39, 0.0, 17.5, 3.0, 1.0) # x4 + 3.0x3 + 17.5x2 - 13.39 

>>> print compute_deriv(poly)    # 4.0x3 + 9.0x2 + 35.0x 

(0.0, 35.0, 9.0, 4.0) 

poly: tuple of numbers, length > 0 

returns: tuple of numbers 

""" 

# TO DO ... 

そして、これは私のプログラム(それが動作する)である:

def compute_deriv(poly): 
    derivatives=() 
    for i in poly: 
     if list(poly).index(i)==0:  #my version is 2.5.4, so I cannot use 
      continue      #tuple.index(i) and since I didn't 
     else:        #find another way, I converted the 
      deriv=i*list(poly).index(i)   #tuple to a list 
      derivatives=derivatives+(deriv,) 
    return derivatives 
polyx=(-13.39, 0.0, 17.5, 3.0, 1.0) 
print compute_deriv(polyx) 
polyxx=(1.3, 7.0, 4.0, 2.5, 0.0, -8.0) 
print compute_deriv(polyxx) 

最初の事は、私が代わりにその中にそれを書くの入力に多項式を私に依頼するプログラムのために望んでいたということです。

... 
polyx=tuple(raw_input("Enter your polynomial tuple here:")) 
print compute_deriv(polyx) 

でも動作しませんでした:

Enter your tuple here:-13.39, 0.0, 17.5, 3.0, 1.0 
('1', '33', '...', '33', '99999', ',,,,,,', '  ', '00000000', '...', 
'00000000', ',,,,,,', '  ', '1', '77777777777777', '...', 
'5555555555555555', ',,,,,,', '  ', '33', '...', '00000000', ',,,,,,', 
' ', '1', '...', '00000000') 

なぜですか? もう1つの問題は、メンバがそれぞれ(1.3,7.0,4.0,2.5,0.0、-8.0)の場合、2番目のタプル(-8x^5 + 2.5x^3 + 4x^2 + 7x + 1.3)最初のメンバーが0.0(-8x^5 + 2.5x^3 + 4x^2 + 7xのように)の場合、 - (7.0、8.0、7.5、0.0、-40.0) 、8.0,7.5、-40.0)。 2番目の0.0は省略されています。それは、それが4であるときに-40.0の力が3であることを意味するので、問題です。再び、なぜですか?

ありがとうございました!

+0

バージョンを使用していますか? –

+0

@JayParikh:OPは2.5.4を使用しています。それについてのコードには注意深いコメントがあります。 – BoarGules

答えて

2

raw_input入力を文字列に変換します。したがって、-13.39, 0.0, 17.5, 3.0, 1.0を入力すると文字列が返されます。

次に、タプルに変換します。デフォルトでは、文字列が与えられると、tupleは文字列内の各文字を分割し、それらのすべてを含むタプルを形成します。例:

tuple("Hello World") 

出力:('H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd')

あなたはそれらの結果を得る理由です。解決策:入力タプルはコンマ','によって分離し、次いで、それを分割:

polyx = tuple(raw_input("Enter your polynomial tuple here: ").split(",")) 

例:

Enter your polynomial tuple here: -13.39,0.0,17.5,3.0,1.0 

出力:このタプルは文字列が含まれていることをいえ(u'-13.39', u'0.0', u'17.5', u'3.0', u'1.0')

お知らせ、ではなく、山車。あなたはそれらを変換する必要があります。

polyx = tuple(float(x) for x in raw_input("Enter your polynomial tuple here: ").split(",")) 

例:

Enter your polynomial tuple here: -13.39, 0.0, 17.5, 3.0, 1.0 

出力:あなたのpythonの(-13.39, 0.0, 17.5, 3.0, 1.0)

+0

完璧に動作する、ありがとう! – Dima

-1

問題を引き起こしているのはタプルの動作ではなく、raw_input()の動作です。

>>> polyx=tuple(input("Enter your polynomial tuple here:")) 
Enter your polynomial tuple here:-13.39, 0.0, 17.5, 3.0, 1.0 
>>> polyx 
(-13.39, 0.0, 17.5, 3.0, 1.0) 

をそれは(おそらくないここでは、一般的には)安全ではないと考えられている:

>>> polyx=tuple(raw_input("Enter your polynomial tuple here:")) 
Enter your polynomial tuple here:-13.39, 0.0, 17.5, 3.0, 1.0 
>>> polyx 
('-', '1', '3', '.', '3', '9', ',', ' ', '0', '.', '0', ',', ' ', '1', '7', '.', '5', ',', ' ', '3', '.', '0', ',', ' ', '1', '.', '0') 

あなたは代わりinput()を使用することができます。もう1つの方法は、入力行を自分で解析することです。

+0

ありがとう、それを覚えておいてください! – Dima

関連する問題