比较print语句中的两个字符串并相应地打印值

时间:2017-04-04 21:59:24

标签: python python-3.x

我循环遍历数据文件中的每一行(包含以空格分隔的“字段”的行),并希望将一个字段的子字符串与另一个静态值进行比较。如果比较为真,我想打印字符串'X',否则'Y'。只是想知道如何使用Python完成它。任何帮助,将不胜感激。感谢。

代码: -

for i in inputm[1:]:    
    print('\n',i[0].split(':')[0]
              ,str(datetime.strptime(i[0].split(':')[1],'%Y%m%d'))[:10]
              ,i[1],round(sum( float(v) if v else 0.0 for v in i[2:6])/4,2)
              ,i[6][0:23]
          )

输入: -

1:20160101  123 10  20  0   0   http://www.google.com/favorites 
2:20170101  234 20  30  10  0   http://www.doodle.com/favorites

输出: -

1 2016-01-01 123 7.5 Correct
2 2017-01-01 234 17.5 InCorrect

评论: - 我对这段代码非常感兴趣。

  i[6][0:23]

想要将上面的子字符串与http://www.google.com进行比较,如果它们匹配,则打印正确的其他InCorrect。

3 个答案:

答案 0 :(得分:-1)

Python提供了一种三元风格的表达式语法,如下所示:

value1 if condition else value2

您可以使用它来打印:

x = some_number()
print( 'X' if x < 10 else 'Y' )

答案 1 :(得分:-1)

不要试图一气呵成,分而治之:

# read the lines
with open('myfile.txt', 'rb') as fp:
    rows = fp.readlines()

# split the lines into fields
rows = [row.split() for row in rows]

# create a function to format field values
def fmt_row(row):
    res = []
    res += row[0].split(':')  # split the first field on :
    res += [float(field) for field in row[1:-1]]  # convert all but first/last field to float
    date = res[1]
    res[1] = '%s-%s-%s' % (date[:4], date[4:6], date[6:])
    return res

# convert/format all the rows
rows = [fmt_row(row) for row in rows]

# finally create the output
output = [[
    row[0],   # first output field
    row[1],   # second..
    round(sum(row[2:-1]/4), 2),
    'Correct' if row[-1] == 'http://www.google.com/favorites' else 'InCorrect'
] for row in rows]

# print the output?
print '\n'.join([' '.join(row) for row in output])

答案 2 :(得分:-2)

您可以使用内联if语句 -

"Correct" if some_condition else "InCorrect"

如果条件为真,则返回“正确”。

但我真的建议你使用一些中间变量。你的代码是不可读的。