-2

我正在尝试在 python 中编写一个 if 语句,该语句将使用以下代码写入 csv 文件。我希望 if 语句写入 CSV 文件中的单元格。我想让它说“X 大于 Y”或“Y 大于 X”。

from bs4 import BeautifulSoup
import csv
x = int(raw_input())
y = int(raw_input())

f = csv.writer(open("pe_ratio.csv", "w"))
f.writerow(["Company Name","PE"])
f.writerow('[x+y, 
    if x > y:    
        print "X is bigger than y"
    if x < y:
        print "Y is bigger than x"
        ]')

尝试纠正它时,我收到以下错误:

"pe_ratio.py", line 8
f.writerow('[x+y,
SyntaxError: EOL while scanning string literal

这段代码解决了这个问题:

from bs4 import BeautifulSoup
import csv
x = int(raw_input())
y = int(raw_input())

f = csv.writer(open("pe_ratio.csv", "w"))

if x > y:    
        f.writerow(["X is bigger than y"])
elif x < y:
        f.writerow(["Y is bigger than X"])
4

2 回答 2

2

您不能评估字符串中间的代码。但你不需要;您可以评估其值为字符串的代码。

在您的情况下,您正在尝试评估一个if没有价值的陈述。您可以通过使用三元if表达式来解决此问题:

f.writerow([x+y, 
            "X is bigger than Y" if x > y else "Y is bigger than x"])

但请注意,这不能x == y正确处理以下情况;为此,您需要将一个if-else表达式嵌套在另一个表达式中,这比现在更丑陋。

更好的解决方案是使用if语句来驱动writerow而不是相反:

if x > y:
    f.writerow([x+y, "X is bigger than y"])
elif x < y:
    f.writerow([x+y, "Y is bigger than x"])
于 2013-10-22T22:29:45.630 回答
2

是什么让你认为你能做到?您将无法在这样的带引号的字符串中引用局部变量 x 和 y。你到底想完成什么?

如果要简单地打印“X 大于 y”或“Y 大于 x”,则可以这样做:

if x > y:    
        f.writerow(["X is bigger than y"]
elseif x < y:
        f.writerow(["Y is bigger than X"]
于 2013-10-22T22:19:29.697 回答