2017-04-24 22 views
0

私はこのプログラムにエラーがあります。システムが変数を文字列として混同しているように見えるので、何が起こっているのかを教えてもらえますか?私は変数を変更しようとしましたが、それは常に動作を停止するようです。なぜこの単純なコードが機能しないのですか

# Area of rectangle 
a = input("What is the length of side a in centimeters") 
b = input("What is the length of side b in centimeters") 
area = a * b 
print(area) 

それは私のアマチュアコーディング状況を考えると

line 5, in <module> 
    area = a * b 
TypeError: can't multiply sequence by non-int of type 'str' 

私にこの応答を与え、私はこのことから取るすべては、そのは何の文字列が存在しない文字列を乗算しようとしているということです。

+0

'str'に別の' str'や 'float'や' byte'を乗算することはできません。 'str'に' int'を掛けることしかできません。 –

+1

男、私は教師があなたがコードすることを学んでいるときにPycharmのようなものを使用させる理由を理解していません。私はJava、C++などの言語を学ぶためのIDEを完全に理解することができますが、* Python *を学んでいる場合は、テキストエディタ/ –

答えて

3

入力をintの値にキャストするという簡単な修正点があるという点で、これまでの答えは正しいです。しかし、このエラーはちょっと不思議です。

TypeError: can't multiply sequence by non-int of type 'str'

となります。

ここで起こっていることは、文字列が文字列であることをPythonが理解していることです。これは、例えば'a'のような単一の文字であっても、あるいは文字がない場合でも当てはまります。例えば、''のように、一般的にはPythonで基本文字種を使用しません。

そして、それは、Pythonであなたが順序掛けることができていることが判明 - リストやタプルまたはそのようないくつかを - そのシーケンスをn回繰り返すように数値nによって:あなたが行うことができます

>>> [1, 2, 3] * 5 
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] 

ので、文字列を使用してこの:

>>> "abc" * 3 
'abcabcabc' 

いますが、別のシーケンスによるシーケンスを乗算することはできません。

>>> [1, 2, 3] * ['a', 'b', 'c'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'list' 

と予想されるように、我々は文字列で、文字列を乗算しようとしている同じエラーを取得:

>>> "abc" * "def" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'str' 

は、両方の文字列が数値のように見える場合でも:

>>> "6" * "10" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'str' 

私は、これはあなただけではない理解するのに役立ちます願っていますどのようにエラーを修正するが、エラーは何で始まったのか。

0
# Area of rectangle 
a = input("What is the length of side a in centimeters") 
b = input("What is the length of side b in centimeters") 
#convert input to int. 
area = int(a) * int(b) 
print(area) 
+0

助けてくれてありがとう: – HeatwaVe

1

入力をint/floatにキャストする必要があります。

int(a) * int(b) 
+0

助けてくれてありがとう:) – HeatwaVe

0

input()は文字列として与えられた数を読み取ります。あなたはこのようにそれをキャストする必要がありますので、

inputは、文字列を返します。あなたは

a = input("What is the length of side a in centimeters") b = input("What is the length of side b in centimeters") area = int(a) * int(b) print(area) 
任意の算術計算を行う前に、数に変換し

a = int(input("What is the length of side a in centimeters")) 
b = int(input("What is the length of side b in centimeters")) 
area = a * b 
print(area) 

OR

を持っ注:
(必要に応じ)あなたは、コードを簡略化することができます。

a = int(input("What is the length of side a in centimeters")) 
b = int(input("What is the length of side b in centimeters")) 
print(a*b) 
関連する問題