2014-11-25 61 views
-1

我有一个最终项目。这是绊倒我的部分。我需要弄清楚如何拉的整条生产线出文件,如果最后的数字是超过750的文件是这样的:如何使用文件中的特定行并在Python中进行打印

A 500 600 700 144.666 

然后你告诉它,所以去了很多次J或Q或F或其他。如果第四个数字超过750,那么我必须打印整行。要求如下:

在小于750公里的距离内打印报警消息,以显示X,Y和Z位置的小行星。

对于最近的小行星,向控制台发出警报消息,然后发出7声嘟嘟声(实际嘟嘟声)。

报警信息可能如下所示:小数点后只有两位数字。

Warning - Warning - Warning 
Nearest asteroid B at ??, ??, ??: ?? km away 
Time to impact ??? seconds 
asteroid B at at ??, ??, ??: ?? km away 
asteroid D at at ??, ??, ??: ?? km away 

我还没有接近声音部分,我只需要弄清楚如何打印整条线。我假设一个for循环或if语句?这是我第一次编程,所以我有点迷路。

+0

那么你能向我们展示一段代码和一个示例文件来重现此问题吗? – Dijkgraaf 2014-11-25 00:51:27

回答

0
with open("path/to/your_file") as f: 
    for line in f: # loop over every line 
     spl = line.split() 
     if float(spl[4]) > 750:# split on whitespace and check if fourth/last digit is > 750 
      print(line) 
     else: 
      print("Alarm! asteroid within 750km, position {} {} {}".format(spl[1],spl[2],spl[3])) 
In [4]: line = "A 500 600 700 144.666" 

In [5]: line.split() # splits into individual elements 
Out[5]: ['A', '500', '600', '700', '144.666'] 

In [6]: float(line.split()[4]) # casts the string to a float 
Out[6]: 144.666 

您必须转换为floatint('144.666')将抛出一个错误,也750.1 > 750

如果你在Windows下你可以使用winsound为报警

1https://docs.python.org/2/library/winsound.htmlpyglet似乎跨平台

+0

它告诉我,我的文件替换的's'没有任何属性。我也尝试将我用来附加到我的文件的列表放在's'中,并且它说了同样的事情。 :( – Jackie 2014-11-25 00:16:05

+0

@Jackie。它应该是行不是s,这是一个错字,如果你不在同一个目录中,请确保你提供了文件的完整路径 – 2014-11-25 00:16:46

0
import csv 

with open('path/to/file') as infile: 
    for row in csv.reader(infile, delimiter=' '): 
     if int(row[4]) > 750: 
      print(' '.join(row)) 
0

首先你读了像这样的文件

with open('file.txt') as f: 
    for line in f: 
     ##split the line by your deliminator (assumming it is tab delimitated), this will return a list 
     fields = line.split('\t') 
     ### determine if fields[4] which correspond to the 5th column (python list are 0 based) 
     if (int(fields[4]) > 750) 
      print(line) 
+0

'print(line)'将适用于python 2和3 – 2014-11-25 00:29:01

相关问题