19387


python言語のリストを使った、文字列と画像ファイルの表示についてです。

list1= [‘あ’, ’い’, ’う’]  
list2 = [[画像1〜10], [画像11〜20], [画像21〜30], [画像31〜40], [画像41〜50], [画像51〜60]]  
のように文字列 (3) と画像ファイル (60) ファイルが格納された２つのリストがあるとします。

list1の’あ’はlist2の[画像1〜10]と[画像11〜20]、list1の’い’はlist2の[画像21〜30]と[画像31〜40]、list1の’う’はlist2の[画像41〜50]と[画像51〜60]、とそれぞれ必ず対応するようにします。

この対応付けを元にlist3[a1, a2,...b1, b2,...f59, f60]を作ります。  
そして、a1を入力すると文字列’あ’が表示され、さらに何かキーを押すと対応した画像 (1) が出るようにするには、どうすればよいでしょうか。  
例えば、

> 「a1を入力」  
>  あ  
>  画像1
>
> 「b1を入力」  
>  あ  
>  画像11
>
> 「c1を入力」  
>  い  
>  画像21
>
> 「d1を入力」  
>  い  
>  画像31
>
> 「e1を入力」  
>  う  
>  画像41
>
> 「f1を入力」  
>  う  
>  画像51

ようになることが目標です。

多次元配列などにすれば可能でしょうか。


CC BY-SA 3.0
2015-11-27T16:06:34.937
19383
2015-11-28T02:55:09.417
7677
question
python
リストの組み合わせで画像を表示する


> a1を入力すると文字列’あ’が表示され、さらに何かキーを押すと対応した画像 (1) が出るようにする...

おそらく、list2 には個々の画像のファイルポインタが格納されているのだと思いますが、以下では文字列(ファイル名)だとしておきます。

なお、以下のコードでは termios ライブラリを利用していますので、おそらく UNIX 系 OS 以外では動作しないのではないかと思います。

[code]

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import sys
    
    def is_keypressed():
      import tty, termios
      fd = sys.stdin
      old = termios.tcgetattr(fd)
      try:
        tty.setraw(fd)
        fd.read(1)
      finally:
        termios.tcsetattr(fd, termios.TCSAFLUSH, old)
    
    def show_item(inp):
      idx1 = ord(inp[0]) - ord('a')
      if idx1 < 0 or idx1 > len(list2)-1:
        print 'No matching.'
        return
    
      try:
        idx2 = int(inp[1:]) - 1
      except ValueError:
        print 'Illegal input.'
        return
    
      if idx2 < 0 or idx2 > len(list2[idx1])-1:
        print 'No matching.'
        return
    
      print list1[idx1/2]
      is_keypressed()
      print list2[idx1][idx2]
    
    if __name__ == '__main__':
      list1 = [u'あ', u'い', u'う']
      list2 = [[u'画像' + str(x+1) for x in range(y*10,(y+1)*10)] for y in range(0,6)]
    
      while True:
        try:
          # Ignore the rest of key sequence of a function key, arrow key and etc.
          sys.stdin = open('/dev/tty')
          inp = raw_input('? ')
          if inp:
            show_item(inp)
        except EOFError:
          break
    
[/code]


CC BY-SA 3.0
2015-11-28T02:44:51.397
19387
2015-11-28T02:55:09.417
2015-11-28T02:55:09.417
19383
answer