Python TypeError:シーケンスを「str」型の非整数で乗算することはできませんソリューション
Pythonでは2つの数値を掛け合わせることができます。数値に文字列を掛けることもできます。これは、特定の回数繰り返される文字列のシーケンスを返します。
文字列を別の文字列で乗算しようとすると、「TypeError:シーケンスを「str」型の非整数で乗算できません」というエラーが発生します。
このガイドでは、このエラーの意味と、コード内のどこでエラーが発生する可能性があるかについて説明します。このエラーの例を見ていき、問題を解決する方法を理解するのに役立ててください。
TypeError:シーケンスに「str」型の非整数を掛けることはできません
文字列はシーケンスの一種です。これは、Pythonが反復できる文字が含まれているためです。他のタイプのシーケンスには、タプル、辞書、およびリストが含まれます。
乗算演算子(*)を使用して、文字列の内容を繰り返す文字列を作成します。次のコードを検討してください。
print("Cakes! " * 2)
このコードは次のように返します。ケーキ!"。乗算演算子を使用すると、文字列が2回繰り返されます。
乗算演算子を使用して、文字列を文字列で乗算することはできません。同じデータ型の値を掛けることができる値は、整数と浮動小数点数だけです。 Pythonが2つの文字列の乗算を解釈する方法はありません。
シナリオ例
木曜日の午後にレストランがジャムスコーンでどれだけのお金を稼いだかを計算するプログラムを作成しましょう。
参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。
平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。
まず、ジャムスコーンの価格を定義する必要があります。また、input()ステートメントを使用して、ビジネスの最終日に販売したジャムスコーンの数をユーザーに教えてもらいます。
jam_scone = "1.95" sold = input("How many jam scones did you sell yesterday? ")
次に、これら2つの値を乗算します。これにより、特定の日にジャムスコーンからどれだけのお金が得られたかがわかります。
earned_from_scones = jam_scone * sold
スコーンからどれだけの収益が得られたかがわかったので、print()
を記述します。 計算結果をユーザーに通知するステートメント:
print("You earned ${} from selling scones.".format(earned_from_scones))
format()メソッドを使用すると、中括弧({})が文字列に表示される「earned_from_scones」の値を追加できます。
また、各スコーンでどれだけの利益が得られるかを計算する必要があります。私たちは、各スコーンで25セントの利益を上げていることを知っています。どれだけの利益が得られるかを計算するには、次のコードを使用します。
profit = sold * 0.25 print("You made a ${} profit from selling scones.".format(profit))
このコードは、各スコーンからどれだけの利益が得られたかを計算し、その値をコンソールに出力します。コードを実行して、機能するかどうかを確認しましょう。
How many jam scones did you sell yesterday? 17 Traceback (most recent call last): File "main.py", line 4, in <module> earned_from_scones = jam_scone * sold TypeError: can't multiply sequence by non-int of type 'str'
コードはエラーを返します。
ソリューション
エラーからコード行を分析してみましょう。
earned_from_scones = jam_scone * sold
このコード行は問題ないように見えますが、問題があります。2つの文字列値を乗算しようとしています。 「jam_scone」を文字列として保存します。 input()
メソッドは、sold()
を意味する文字列を返します 文字列値があります。
この問題を解決するには、「jam_scone」と「sold」の両方が浮動小数点であることを確認する必要があります。これにより、これらの値に対して数学演算を実行できます。
次に、これらの変数の値を宣言する方法を変更します。
jam_scone = 1.95 sold = float(input("How many jam scones did you sell yesterday? "))
「jam_scone」の値は引用符で囲まれなくなりました。これは、「jam_scone」を文字列からフロートに変更したことを示しています。また、float()メソッドを使用して、「sold」の値を浮動小数点数に変換しました。
コードを実行して、何が起こるかを確認します:
How many jam scones did you sell yesterday? 17 You earned $33.15 from selling scones. You made a $4.25 profit from selling scones.
コードは正常に機能します。まず、コードはユーザーに、販売されているスコーンの数をコンソールに挿入するように求めます。次に、私たちのプログラムは、店がスコーンの販売からどれだけのお金を稼いだかを計算します。最後に、私たちのプログラムは、スコーンの販売から生み出される利益を計算します。
結論
「TypeError:シーケンスを「str」型の非整数で乗算できません」というエラーは、2つの文字列値を一緒に乗算しようとすると発生します。この問題は、2つの数値を乗算するか、文字列に整数のみを乗算することで修正できます。
これで、Pythonistaのようにこのエラーを解決する準備が整いました!
-
Pythonで変数の型が文字列であるかどうかを確認するにはどうすればよいですか?
isinstance(var、class)を使用して、varが指定されたクラスのインスタンスであるかどうかを確認できます。 Python 2.xでは、strとunicodeの基本クラスはbasestringです。したがって、次のように使用できます。 >>> s = 'A string' >>> isinstance(s, basestring) True >>> isinstance(s, str) True >>> isinstance(10, basestring) False 注:Python
-
PythonでTypeError例外をキャッチする方法は?
TypeErrorsは、間違ったタイプのオブジェクトを組み合わせたり、間違ったタイプのオブジェクトで関数を呼び出したりすることで発生します。 例 import sys try : ny = 'Statue of Liberty' my_list = [3, 4, 5, 8, 9] print my_list + ny except TypeError as e: print e print sys.exc_type 出力 can only concatenate list (not ""str") to list <type