前提・実現したいこと
Googleの公開している以下のプログラミング課題のサンプルコードがうまく動作せず、また一部ソースコードの意味がわからず困っています。素人質問で恐縮ですが、どなたか教えてください。
■課題のリンク先
課題の内容は文字列といくつかの単語のリストが与えられ、単語のリストの中で、すべての文字が文字列の中に順番どおりに含まれる単語の中で最長の単語を表示するプログラムです。
発生している問題・エラーメッセージ
上記課題のリンク先にあるコード例をコピーペーストすると、21行目のelse文にてエラーが発生します。
E0001:invalid syntax (<string>, line 34)
該当のソースコード
Python
1#!/usr/bin/env python 2import collections 3import sys 4def find_longest_word_in_string(letters, words): 5 letter_positions = collections.defaultdict(list) 6 7 for index, letter in enumerate(letters): 8 letter_positions[letter].append(index) 9 10 for word in sorted(words, key=lambda w: len(w), reverse=True): 11 pos = 0 12 for letter in word: 13 if letter not in letter_positions: 14 break 15 16 possible_positions = [p for p in letter_positions[letter] if p >= pos] 17 if not possible_positions: 18 break 19 pos = possible_positions[0] + 1 20 else: 21 return word 22 23if __name__ == '__main__': 24 print subdict(sys.argv[1], sys.argv[2:])
試したこと
上から順にコードを読んで行って修正を試みているのですが、以下の二点がわからず、止まっております。この箇所以前については個別に動かして正しく動作していることを確認しました。
1,16行目のpossible_positions = ~の行で何をしているのか意味がわからず、その後が理解できません。
2,以下の部分で何をしているのかよくわかりません。
if name == 'main':
print subdict(sys.argv[1], sys.argv[2:])
補足情報(FW/ツールのバージョンなど)
Python3.6.5(Anaconda3)
回答2件
あなたの回答
tips
プレビュー