【问题标题】:If statement won't run even though conditions are met即使满足条件,if 语句也不会运行
【发布时间】:2020-11-25 15:23:03
【问题描述】:

我正在做一个项目,我的代码应该从文本文件中获取行,并读取表格中每个值的第一个数字。然后它应该应用本福德定律来查看值 1-9 的第一位数字的频率。现在我正在获取这些值并将它们放入一个名为“行”的列表中,然后转到一个范围为 (1,10) 的 for 循环,其值为 n 以检查值 1-9,然后在其中嵌套另一个 for 循环遍历行中的所有元素,然后在该语句中嵌套一个 if 语句,检查行中元素的第一个数字是否与 n 相同。如果每次出现时都将数字放入一个名为 number_counter 的列表中。我稍后使用另一个 for 循环将它们转换为频率,但是检查行中元素的第一个数字和 n 是否相等的 if 语句永远不会运行,即使我每次都打印出 n 和第一个数字以查看它们是否曾经匹配过,他们做了多次。我很困惑为什么它没有触发。由于我仍在从事该项目,因此代码远未清理和组织。

lines = []

file = open('data1.csv', 'r')
f = file.readlines()
for line in f:
    lines.append(line.strip())
file.close()

r = open('analysis_results.txt', 'w')

number_counter = []
k = 0
for n in range(1,10):
    for x in lines:
        k = x[0]
        if k == n:
            number_counter.append(k)

print(number_counter)

frequencies = []

for n in range(1,10):
    p = 0
    print(n)
    for x in number_counter:
        if x == n:
            p += 1       
    p = p // len(lines)
    frequencies.append(p)
     
print(frequencies)
print(k)

【问题讨论】:

标签: python if-statement


【解决方案1】:

您的代码中有许多错误。首先,当您尝试在第一个循环中将kn 进行比较时,会出现类型不匹配。当您将x[0] 分配给k 时,k 正在变成一个字符串,而n 是一个整数,因此它们永远不会相等。

此外,当您计算频率时,您总是会使用p = p // len(lines),这在大多数情况下将始终为零,如果所有行都以 1-10 之间的相同数字开头,则对于该特定数字的情况可能是 1。

所以总而言之,试试这个修改后的版本:


lines = []

file = open("data.csv", "r")
f = file.readlines()
for line in f:
    lines.append(line.strip())
file.close()


number_counter = []
# k = 0  # <-- you don't need this at all
for n in range(1, 10):
    for x in lines:
        k = int(x[0])  # convert the first character to int
        if k == n:
            number_counter.append(k)

print(number_counter)

frequencies = []

for n in range(1, 10):
    p = 0
    print(n)
    for x in number_counter:
        if x == n:
            p += 1
    # p = p // len(lines)  # remove this to get the integer number of occurences
    frequencies.append(p)

print(frequencies)
print(k)

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 2015-07-12
    • 2015-08-08
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多