質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

459閲覧

python 実行してもNoneと表示される

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/31 14:53

前提・実現したいこと

python初学者です。
innerProductはIntBag型の変数を一つ持つ。2つのIntBagのデータの個数が同じであるとき,対応する要素の積の和を求める。
例えば,IntBagの変数aとbを定義し,aに2, 4,を入れ,bに3, 5を入れるとa.innerProduct(b)は,23+45となるはずです。
データの個数が同じでない時は、適当に個数が違うことを知らせようと思います。

発生している問題・エラーメッセージ

整数を入力してください:1 整数を入力してください:2 整数を入力してください:^Z 整数を入力してください:3 整数を入力してください:4 整数を入力してください:^Z None

該当のソースコード

python

1python 2class IntBag: 3 def __init__(self): 4 self.data=[] 5 def length(self): 6 return len(self.data) 7 def set(self,i,a): 8 self.data[i]=a 9 def get(self,i): 10 return self.data[i] 11 def append(self,a): 12 self.data.append(a) 13 def readData(self): 14 try: 15 while True: 16 self.data.append(int(input("整数を入力してください:"))) 17 except EOFError: 18 pass 19 20 def innerProduct(self,i): 21 b=IntBag() 22 for i in range(b.length()): 23 if i.length==b.length: 24 print(sum((b.get(i))*(self.data.get(i)))) 25 else: 26 print("個数が違います") 27 28
from g import IntBag a=IntBag() a.readData() b=IntBag() b.readData() a.innerProduct(b)

やはり、コードが間違っているということなのでしょうが、具体的にどこが間違っているでしょうか。長時間考えても分からなかったので質問させていただきました。
初歩的な内容かつかなり間違えているかもしれませんが、どなたかご教授願えないでしょうか。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

python 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

たぶんここです。

Python

def innerProduct(self,i):
b=IntBag()
for i in range(b.length()):
...

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

Python

1def innerProduct(self,b): 2 for i in range(b.length()): 3 ...

変数に同じ名前bを付けたとしても、同じオブジェクトとして取り扱えるわけではありません。

結果 innerProduct メソッドのローカル変数としてbが作られ、
そしてこのとき b.data は空のリスト(初期値)です。

ループを一周もしないまま innerProduct から脱出しているのでしょう。

投稿2020/01/31 15:28

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2020/01/31 15:30

この指摘に基いてコードを直しても、そのまま実行すれば今度はAttributeErrorを吐くでしょう。一段階進んだということでまた少し粘ってみて下さい。
退会済みユーザー

退会済みユーザー

2020/02/01 05:03

ありがとうございます!頑張ります!
guest

0

ベストアンサー

g.py

python3

1class IntBag: 2 def __init__(self): 3 self.data = [] 4 5 def length(self): 6 return len(self.data) 7 8 def set(self, i, a): 9 while len(self.data) <= i: 10 self.append(None) 11 self.data[i] = a 12 13 def get(self, i): 14 return self.data[i] 15 16 def append(self, a): 17 self.data.append(a) 18 19 def readData(self): 20 try: 21 while True: 22 self.data.append(int(input("整数を入力してください:"))) 23 except EOFError: 24 print() 25 pass 26 27 def innerProduct(self, other): 28 if self.length() == other.length(): 29 nums = [self.get(i) * other.get(i) for i in range(0, self.length())] 30 # print(nums) 31 return sum(nums) 32 else: 33 print("個数が違います")

a0.py

python3

1from g import IntBag 2 3a = IntBag() 4a.readData() 5 6b = IntBag() 7b.readData() 8 9print(a.innerProduct(b))

実行例
イメージ説明

これは Mac で実行しているので、 データ終了は Crl-Z でなく Ctr-D で入力しています。

投稿2020/02/01 05:27

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問