-2

次の行を含む、dogs.txt というテキスト ファイルがあります。

'#'カラー体毛タイプ

ホワイト ラージ ハード コンサバ

黄 大 ハード コンサバ

ブラウン ラージ ソフト バイオレンス

黄 大 ソフト コンサバ

ブラウン スモール ハード コンサバ

ブラウン スモール ハード コンサバ

ホワイト スモール ハード コンサバ

黄色の小さな柔らかい暴力的な

黄色 小さい 硬い 暴力的

ブラウン ラージ ハード コンサバ

ホワイト ラージ ソフト コンサバ

黄色の小さな柔らかい暴力的な

ブラウン スモール ソフト コンサバティブ

ブラウン ラージ ハード バイオレンス

ブラウン スモール ハード コンサバ

黄色 小さい 硬い 暴力的

各線は犬を表しています。人がdogs.txtを入力したときに出力に表示したいことが2つあります。

  1. 犬は何匹いますか。小切手

  2. 黄色くて凶暴な犬は何匹いますか?

出力から、16 匹の犬がいることがわかります。

私が次にしなければならないことは、この 16 匹の犬のうち、黄色くて凶暴な犬が何匹いるかを見つけることです。私はしばらくこれを行う方法に行き詰まっていました。infile.read() を使用する必要があると考えていますが、方法がわかりません。みんな助けてください。

4

4 に答える 4

2

黄色で暴力的な番号を確認する簡単な方法は次のとおりです。

with open('dogs.txt') as f:
    f.readline() # Skip first line
    print sum({'yellow','violent'}.issubset(line.split()) for line in f)

ただし、行番号チェックを追加すると、それほどエレガントではありません

with open('dogs.txt') as f:
    f.readline() # Skip first line
    i, num_dogs = 0, 0
    for line in f:
        num_dogs += {'yellow','violent'}.issubset(line.split())
        i += 1
    print i, num_dogs
于 2013-03-20T01:05:38.140 に答える
1
yellow_and_violent = 0    
for line in infile:
    if line.strip() and line[0]!='#':               
        lines+=1
    if ('yellow' in line) and ('violent' in line'):
        yellow_and_violent += 1

さらにいくつかのこと:

  • ファイルが見つからない場合にファイルを分析しないように変数を設定するのではなく、カスタム例外を発生させることができます
  • クラス名を変数名として使用しないでください (例: file)

これにより、次のことが得られます。

import os.path

filename = input("Enter name of input file >")
try:
    infile = open(filename, "r")
except IOError:
    raise Exception("Error opening file '%s', analysis will not continue" % filename)

dogs = 0
yellow_and_violent = 0

for line in infile:
    if line.strip() and line[0]!='#':               
        dogs += 1
    if ('yellow' in line) and ('violent' in line):
       yellow_and_violent += 1
print("Total dogs =",dogs)
print("Yellow and violent dogs = ", yellow_and_violent)
于 2013-03-20T00:23:24.290 に答える
1

正規表現の使用:

import os.path
import sys 
import re
reg = re.compile("^yellow.*violent")
try:
    file=sys.argv[1]
    infile=open(file,"r")
except IOError:
      raise Exception("open '%s' failed" % filename)
lines=0
yv=0
for line in infile:
  if line.strip() and line[0]!='#':
    lines+=1
    if reg.match(line):
      yv+=1
print("Total dogs =",lines)
print("Total yv dogs =",yv)
于 2013-03-20T00:25:52.297 に答える
0
dog_counter = 0
yellow_and_violent = 0
with open('dog.txt', 'r') as fd:
    for line in fd.readlines():
        if line.startswith("'#'") or (not line.strip()):
            continue
        dog_counter += 1
        if ('yellow' in line) and ('violent' in line):
            yellow_and_violent += 1
print("Total dogs: %d" % dog_counter)
print("yellow and violent dogs: %d" % yellow_and_violent)
于 2013-03-20T03:58:20.413 に答える