1

クラス属性からの映画のタイトルと時間のリストがあります。このリストを次のように表示しました:

for i in range(0, len(films)):
     print(i, films[i].title, films[i].time)

これにより、タイトルの数と時間のリストが表示されます。

ここで、座席数の選択に基づいて計算できるように、タイトルの任意の項目を取得したいと考えています。

私はこれを試しました:

i = int(input("Please select from our listings :"))
while i <= films[i].title:
    i = input("Please select from our listings :")
    if i in films[i].title:
        print("You have selected film: ",films[i].title)
        print("Regular seat: ", choice[regular], "\nVip Seat: ", choice[vip], "\nDiamond Seat: ", choice[diamond], "\nPlatinum Seat: ", choice[platinum], "\nDisability Regular Seat: ", disabilityRegular, "\nDisability Vip Seat: ", disabilityVip, "\nDisability Diamond Seat", disabilityDiamond, "\nDisability Platinum Seat", disabilityPlatinum )
        seatType = input("\nSelect your seat from these list: ")
        seating = int(input("How many seats: "))

        if seating == items in choice:
            total = seating*altogether[seatType]
            print(total) 

実行すると、次のように表示されます:(リストは0から始まることに注意してください):

29 End of Watch 20:00
30 Gremlins 19:30
31 The Twilight Saga: Breaking Dawn part 2 20:00

Please select from our listings :6
Please select from our listings :4

Traceback (most recent call last):
  File "C:/Python32/cin.py", line 91, in <module>
    if i in films[i].title:
TypeError: 'in <string>' requires string as left operand, not int
4

2 に答える 2

1
if i in films[i].title:

文字列内の整数との一致を試みます。最初に整数を文字列に変換する必要があります。

if str(i) in films[i].title:

しかし、これは2のような名前に'... part 2'も一致しますが、'1492: Conquest of Paradise'.

映画の番号を見つけたい場合は、これを試してください。

for i, film in enumerate(films):
     print('{0:3} {1:30} {2:5}'.format(i, film.title, film.time))

while True:
    try:
        film = films[int(input("Please select from our listings :"))]
    except (ValueError, IndexError), e:
        # input is not an integer between 0 and len(films)
        continue

    # now we have a valid film from the list
    print("You have selected film: ",film.title)
    # ...
于 2012-12-07T10:13:19.653 に答える
0

映画IDをキーとして使用している場合は、リストの代わりに辞書を使用して映画を保存する価値があるかもしれません。そうすれば、「in」を使用するだけで、範囲外の例外を気にすることなく、フィルムIDキーが辞書に存在するかどうかを確認できます。

class Film(object):
    def __init__(self, title, time):
        self.title = title
        self.time = time

films = {}
films[29] = Film("End of Days", "20:00")
films[30] = Film("Gremlins", "19:30")
films[31] = Film("The Twilight Saga: Breaking Dawn part 2", "20:30")

for k,v in films.iteritems():
    print (k, v.title, v.time)

while True:
    i = int(input("Please select from our listings:"))
    if i in films:
        print ("You have selected film: ", films[i].title)
        # select seat here
    else:
        continue
于 2012-12-07T11:05:19.680 に答える