2016-08-22 4 views
-1

私がここでやろうとしているのは、存在していなければポケモンの目撃の緯度と経度をテキストファイルに書き出すことです。私は無限ループを使用しているので、すでに存在する座標の組が追加されるのを防ぐif-stateを追加しました。 私は同じ情報を格納するCoordinatesも持っていることに注意してください。ただし、テキストファイルは理論的にはリストと同じifブロック内に含まれていてはならないにもかかわらず、何度も何度も追加された同じ座標を持っています。明確にするためIf文が書き込み操作によって一見無視される

import requests 

pokemon_url = 'https://pogo.appx.hk/top' 

while True: 
    response = requests.get(pokemon_url) 
    response.raise_for_status() 

    pokemon = response.json()[0:] 

    Sighting = 0 
    Coordinates = [None] * 100 

    for num in range(len(pokemon)): 
     if pokemon[num]['pokemon_name'] == 'Aerodactyl': 
      Lat = pokemon[num]['latitude'] 
      Long = pokemon[num]['longitude'] 
      if (Lat, Long) not in Coordinates: 
       Coordinates[Sighting] = (Lat, Long) 
       file = open("aerodactyl.txt", "a") 
       file.write(str(Lat) + "," + str(Long) + "\n") 
       file.close() 
       Sighting += 1 

、これはあなたがあなたがそれらを反復ごとにリセットしたくない場合はwhileループの外であなたのSightingCoordinates変数を配置する必要があり、出力 For clarity purposes, this is the output

+0

このコードは完全に台無しにされています。 'while True'ループは決して終了せず、' file.close'呼び出しの後に一対の括弧を追加するのを忘れてしまいます。 – xmcp

+0

'for'ループは' while'ループの中にあるはずですか? – Barmar

+0

リストの代わりに座標の 'set()'をお勧めします。 –

答えて

2

です。

しかし、コードにはもっと多くの問題があります。試してみると、ここに私が見つけたものがあります。

  1. whileループの終了条件はありません。貧しいウェブサイトにはこれをしないでください。基本的にスパム要求になります。
  2. file.closefile.close()である必要がありますが、全体的にループの1回の繰り返しではなく、1回だけファイルを開く必要があります。一度それを開き、完了したら閉じます(終了条件を追加すると仮定します)。
  3. 0response.json()[0:])からスライシングする必要はありません。デフォルトでは、リストはインデックス0から始まります。これは新しいリストを得るための複雑な方法かもしれませんが、ここでは不要です。
  4. Coordinatesは、100 Noneのハードコードされたリストであってはなりません。既存の座標を追跡するにはsetを使用してください。
  5. Sightingを一掃してください。要求を何度も再発行している場合は意味がありません。 1つのレスポンスからポケモンを反復する場合は、インデックスが必要な場合はenumerateを使用してください。
  6. 一般に、snake caseをPython変数に使用することをお勧めします。
+0

毎回ファイルを閉じる理由は、無限ループのためです。彼はCtl-cを押してループを終了する。 – Barmar

+0

ありがとうございます。私はこれがひどいコーディングであることを認識していますが、私はウェブページからデータをスクラップすることを学んでいました。 –

+0

@ShermanSzeよろしくお願いします。私たちはすべてここに学びます:) – Karin

0

これを試してみてください:

#!/usr/bin/env python 

import urllib2 
import json 

pokemon_url = 'https://pogo.appx.hk/top' 

pokemon = urllib2.urlopen(pokemon_url) 

pokeset = json.load(pokemon) 

Coordinates = [None] * 100 

for num in range(len(pokeset)): 
    if pokeset[num]['pokemon_name'] == 'Aerodactyl': 
     Lat = pokeset[num]['latitude'] 
     Long = pokeset[num]['longitude'] 
     if (Lat, Long) not in Coordinates: 
      Coordinates.append((Lat, Long)) 
      file = open("aerodactyl.txt", "a") 
      file.write(str(Lat) + "," + str(Long) + "\n") 
      file.close 
関連する問題