首页 > 解决方案 > 即使满足条件,if 语句也不会运行

问题描述

我正在做一个项目,我的代码应该从文本文件中获取行,并读取表格中每个值的第一个数字。然后它应该应用本福德定律来查看值 1-9 的第一位数字的频率。现在我正在获取这些值并将它们放入一个名为'lines'的列表中,然后转到一个范围(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)

标签: pythonif-statement

解决方案


您的代码中有许多错误。首先,当您尝试在第一个循环中进行比较时,类型不匹配k。当你分配给它时,它变成了一个字符串,并且是一个整数,所以它们永远不会相等。nkx[0]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)

推荐阅读