【问题标题】:function to list earthquakes列出地震的功能
【发布时间】:2014-11-14 04:22:04
【问题描述】:

我的功能旨在从本网站获取数据并收集地震的纬度、经度、深度和震级。第二个函数“colorCode”应该获取地震的深度并返回一个颜色值。这就是我卡住的地方。我试图将数据设为浮点数,以便可以使用 if 语句并将其与 int 进行比较,但它仍然表示无法将其转换为浮点数。有什么想法吗? (如果我以不正确的格式发布代码,请见谅)

import urllib

#parseEarthquake: int --> list-of-float

def parseEarthquakeData(numberofearthquakes):
    URLonWeb = urllib.urlopen("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv")
    lines = URLonWeb.readlines()
    numberoflines = len(lines)
    numberoftimes = 0
    index = 1
    myaccumalator = []
    for numberoftimes in range(numberofearthquakes):
        while index < (numberofearthquakes + 1):
            line = lines[index]
            data = line.split(",")
            latitude = float(data[1])
            longitude = float(data[2])
            depth = float(data[3])
            magnitude = float(data[4])
            if magnitude < 2.5:
                magnitude = 2.5
            myList = [[latitude, longitude, depth, magnitude]]
            myaccumalator = myaccumalator + myList
            index = index + 1
        return(myaccumalator)


#return [latitude, longitude, depth, magnitude]

def colorCode(numberofQuakes):
    data = parseEarthquakeData(2)
    data =str(data)
    realdata = data.split()
    if realdata[2] <34:
        print 'orange'
        if realdata[2] >=34<70:
            print 'yellow'
            if realdata[2] >=70<150:
                print 'green'
                if realdata[2] >=150<300:
                    print 'blue'
                    if realdata[2] >=300<500:
                        print 'purple'
                        if realdata[2] >=500:
                            print 'red'

【问题讨论】:

  • 我认为您不希望所有这些 if 语句都像这样缩进。
  • 你得到了什么准确的错误信息?

标签: python list function


【解决方案1】:

Python 有一个非常方便的csv.DictReader 模块来实现您想要实现的目标。我稍微更改了您的代码,使其更短且更具可读性:

import urllib
import csv

#parseEarthquake: int --> list-of-float

def parseEarthquakeData(numberofearthquakes):
    URLonWeb = urllib.urlopen("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv")
    lines = URLonWeb.readlines()
    content = csv.DictReader(lines)
    allEarthquakes = [line for line in content]
    return allEarthquakes[:numberofearthquakes]


#return [latitude, longitude, depth, magnitude]

def colorCode(numberofQuakes):
    data = parseEarthquakeData(2)
    for earthquake in data:
        depth = float(earthquake["depth"])
        print(depth)
        if depth <34:
            print 'orange'
        elif 34 <= depth <70:
            print 'yellow'
        if 70 <= depth <150:
            print 'green'

dictReader 将每一行转换为一个字典,其中包含来自 csv 文件的相应标题。这样做很好,因为与列表相比,您的结构化数据在字典中的可读性要高得多(您不必记住哪个位置是什么)。

您的颜色代码方法中的数字比较也有一些问题,请将您的与我更改为的进行比较。我也不知道你想用data =str(data)实现什么

我没有实现整个颜色逻辑,但您应该能够根据自己的需要进行调整。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2022-01-23
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2017-02-03
    • 2011-01-26
    相关资源
    最近更新 更多