我的功能无法正常工作。当所有的行[0]都小于行[2]时,我一直得到'真'。我知道这非常简单,但这是我为了更好地理解文件和
而采取的练习def contains_greater_than(filename):
"""
(str) --> bool
The text file of which <filename> is the name contains multiple lines.
Each line consists of two integer numbers, separated by a space.
This returns True iff in at least one of those lines, the first number
is larger than the second one.
"""
lines = open(filename).readlines()
for line in lines:
if line[0] > line[2]:
return True
return False
我的数据:
3 6
3 7
3 8
2 9
3 20
答案 0 :(得分:4)
在我过度思考的前一个答案中接受过彻底的教育后,我是否可以提供这个更简单的解决方案,该解决方案仍然按照预期短路:
for line in lines:
x, y = line.split()
if int(x) > int(y): return True
return False
答案 1 :(得分:1)
line[0] = "3" , line[1] = " "
表示数据中的所有情况('3'&lt;''= False)
你需要做
split_line = line.split()
然后
numbers = [int(x) for x in split_line]
然后查看numbers[0]
和numbers[1]
答案 2 :(得分:1)
1)您正在比较需要转换为整数的字符串
2)你只会抓住第一个和第三个字符(因此,你不会得到20中的0)
改为使用
first, second = line.split()
if first < second:
答案 3 :(得分:1)
这是一个完整的功能重写。希望这是启发性的; - )
import functools
def line_iter(fname):
with open(fname) as inf:
for line in inf:
line = line.strip()
if line:
yield line
def any_line(fn, fname):
return any(fn(line) for line in line_iter(fname))
def is_greater_than(line):
a,b = [int(i) for i in line]
return a > b
contains_greater_than = functools.partial(any_line, is_greater_than)
答案 4 :(得分:0)
“3 20”是一个字符串,之前只做map(int,LINE.split())。 但是你想如何比较2个数字和2个数字?
答案 5 :(得分:0)
主要问题是你要比较线的字符,而不是每个字符的两个数字的值。这可以避免首先将行拆分为以空格分隔的单词,然后通过将int()
函数应用于每个单词,将这些单词转换为整数值:
def contains_greater_than(filename):
with open(filename) as inf:
for line in inf:
a, b = map(int, line.split())
if a > b:
return True
return False
print(contains_greater_than('comparison_data.txt'))
这一切都可以在Python中使用内置的any()
函数和generator expressions进行非常简洁的完成:
def contains_greater_than(filename):
with open(filename) as inf:
return any(a > b for a, b in (map(int, line.split()) for line in inf))