【发布时间】:2022-10-30 15:51:28
【问题描述】:
f = open("test.txt", "r")
try:
open_file = f.read()
finally:
f.close()
satisfied = 0
not_satisfied = 0
distinct = ()
distinct = (variable for variable in open_file if not variable in distinct)
length = len(list(distinct))
for i in 2**length: #len(distinct_set) is the equivalent of 2**n
binary = bin(i)
binary_length = len(distinct)
digits = f"binary:binary_length"
true_false = ()
for j in len(distinct): #See slide 24
true_false.append(digits // 10**j % 10)
environments = zip(distinct,true_false)
if eval(open_file,environments) == True:
satisfied += 1
else:
not_satisfied += 1
print('Satisfied: ', satisfied, '; Not Satisfied: ', not_satisfied)
2行:
distinct = (variable for variable in open_file if not variable in distinct)
length = len(list(distinct))
给我一个“builtins.ValueError:生成器已经执行”有谁知道如何解决这个问题?
此外,如果有一种更 Pythonic 的方式来编写我的代码,那将非常有帮助 python新手,非常感谢任何帮助
【问题讨论】:
-
请注意,
distinct = (variable for variable in open_file if not variable in distinct)无论如何都不会做你想做的事,因为分配给了distinct后它通过检查每个值是否在distinct中进行迭代。您可能需要一个集合并删除换行符,例如distinct = set(x.rstrip() for x in open_file.readlines())或稍短的版本distinct = {x.rstrip() for x in open_file.readlines()}。 -
@Kemp:不,它是一个生成器表达式,所以首先发生赋值。然后
list调用开始实际执行,genexp 尝试对自己执行in测试,从而触发异常。 -
@user2357112supportsMonica 啊,我对生成器表达式不太熟悉。我的解决方案仍然有效,即使我的诊断不正确:)
-
@Kemp:我认为我不能在字符串上使用 readlines() - 我得到一个 "builtins.AttributeError: 'str' object has no attribute 'readlines' 异常
-
我的错,当我写的时候,我认为
open_file是文件,而不是文件中的内容。删除readlines()。应该把这个作为答案,然后我可以编辑掉我令人尴尬的疏忽:D
标签: python