0

Python 3では、ユーザーからの入力を3桁のコードとして受け取り、それらをリスト内のアイテムに変換するプログラムを作成しようとしています。次に、これらの項目をタプルのリスト内のタプルの最初の(3桁のコード)部分と比較し、タプル全体を出力します。

import shares
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
print(portfolio_list)
print()
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
data=shares.EXCHANGE_DATA
for  (code, name, share_value) in data:
      if code == i in portfolio_list:
        print('{:<6} {:<20} {:>8.2f}'.format(code, name, share_value))
else:
        print("Failure")

ご覧のとおり、EXCHANGE_DATAというタプルのリストを含むsharesというモジュールを使用しています。これは、次のように設定されています。

EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
         ('AIR', 'Airnz', 5.60),
         ('AMP', 'Amp',3.22), 
         ('ANZ', 'Anzbankgrp', 26.25),
         ('ARG', 'Argosy', 12.22),
         ('CEN', 'Contact', 11.22),
         ('CNU', 'Chorus',3.01),
         ('DIL', 'Diligent', 5.3),
         ('DNZ', 'Dnz Property', 2.33),
         ('EBO', 'Ebos', 1.1),

模範的な入力は次のようになります。 AIA, AMP, ANZ

対応する出力は次のようになります。

Code         Name         Price
AIA          Auckair      1.50
AMP          Amp          3.22
ANZ          Anzbankgrp   26.25

私は、私が必要だと思うforおよび/またはifステートメントに固執しています。

4

1 に答える 1

1

あなたの問題はここにあります:

if code == i in portfolio_list:

これはPythonでは意味がありません。in指定された値がリストに含まれているかどうかをチェックします。したがって、これはにあるかどうかをチェックiportfolio_list、次にcode等しいTrueかどうかをチェックしますFalsei in portfolio_list返されたものは何でも。必要なのは単純です。

if code in portfolio_list:

portfolio_listセットのメンバーシップをチェックする方が大量のデータに対して非常に効率的であるため、長くなる可能性がある場合は、セットにする価値があることに注意してください。

あなたの構文は、さまざまな方法論のマッシュアップのようです。あなたが意味したかもしれません:

if any(code == i for i in portfolio_list):

ただし、これはと直接同等ですがcode in portfolio_list、より冗長で非効率的であるため、適切なソリューションではありません。

于 2013-03-27T01:07:13.490 に答える