0

我试图读取一个文件并确保每个值都是有序的。我不认为我将字符串正确转换为整数。这是我的一些代码。我也在尝试使用标志。

fileName = input("What file name? ")
infile = open(fileName,'r')
correct_order_flag = False
i = 0
line = infile.readline()
while line !="": 
    for xStr in line.split(" "):
        if eval(xStr) [i] < i:
            correct_order_flag = True
        else:
            correct_order_flag = False
    i = i+1
if correct_order_flag:
    print("Yes, the numbers were in order")
else:
    print("No, the numbers were not in order")
count = i - 1
print("There were", count, "numbers.")
4

4 回答 4

4

你是对的 - 你用eval(xStr)[i]它表示的eval(xStr)是一个数组,因此可以下标。您可能想要的(因为您说要将字符串转换为 int)只是int(xStr), 使整行:

if int(xStr) < i:
于 2011-10-30T22:01:33.857 回答
1

对于初学者,您根本不会阅读整个文件。尝试这个:

with open(fileName) as f:
    for line in f:
        # here goes your code

虽然不确定,“每个值都按顺序排列”是什么意思,但eval()无论出于何种目的,使用都是一个非常糟糕的主意。

于 2011-10-30T22:02:12.790 回答
0

我想补充一点,因为您将 xstr[i] 与 i 进行比较,除非您的第一个数字小于零,否则标志会改变,这意味着序列 1 2 3 4 5 会打印出“不,数字不是为了”

于 2011-10-30T22:16:29.340 回答
0

正如 Chris 所指出的,int(s) 是将字符串转换为整数的首选方法。eval(s) 过于宽泛,在评估来自不受信任来源的数据时可能会带来安全风险。

此外,脚本中还有另一个错误。每次迭代都会设置 *correct_order_flag*,因此顺序不正确的条目可以被正确顺序的后续条目屏蔽。因此,当发现不正确的排序时,您应该跳出循环。

于 2011-10-30T22:16:50.820 回答