def is_plaintext3(text, word1, word2 ,word3): words_found = 0 for word in text.split(): if word.lower() in word1: words_found += 10 if word.lower() in word2: words_found += 3 if word.lower() in word3: words_found += 1 return (words_found / len(text.split()))这段代码一直输出0可能的原因是?
时间: 2024-03-16 15:44:29 浏览: 15
这段代码可能一直输出0的原因是因为在参数word1、word2、word3中传入的是字符串,而不是列表。因此,if语句中的条件无法满足,导致words_found变量一直为0。要修复这个问题,应该在传入参数word1、word2、word3时,将它们转换为列表类型。例如,可以使用以下代码传递参数:
```
is_plaintext3("text string", ["word1"], ["word2"], ["word3"])
```
相关问题
def guess_key1(cipher_text, words): letter_frequency = get_letter_frequency(cipher_text.lower()) sorted_letters = sorted(letter_frequency.keys(), key=lambda x: letter_frequency[x], reverse=True) # paixu most_common_letters = sorted_letters[:6] # first 6 for i in range(len(most_common_letters)): for j in range(i+1, len(most_common_letters)): for k in range(j+1, len(most_common_letters)): key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'} # key = {'n': 'e', 'o': 't', 's': 'a'} .... decrypted_text = decrypt(cipher_text, key) if is_plaintext(decrypted_text, words): return key def decrypt(cipher_text, key): mapping_dict = str.maketrans(key) return cipher_text.translate(mapping_dict) def is_plaintext(text, words): words_found = 0 for word in text.split(): if word.lower() in words: words_found += 1 return (words_found / len(text.split())) > 0.001 其中key并没有替换掉所有字母,修改
可以尝试将key字典中没有替换的字母的值设置为出现频率最高的字母,即将如下代码:
```
key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'}
```
修改为:
```
key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'}
for letter in sorted_letters:
if letter not in key:
key[letter] = sorted_letters[0]
```
这样就可以保证key字典中所有字母都被替换了,并且未被替换的字母的值为出现频率最高的字母。
def func(words): n = words[0] for word in words[1:]: while not word.startswith(n): n = n[:-1] if n == " ": return 'NOT FOUND' else: return n words=input().split() print(n) 这个代码哪里有错误
这段代码存在几个错误:
1. 缺少最后一行的函数调用语句,应该使用 `func(words)` 来调用函数。
2. 在 `for` 循环中,`return n` 应该位于循环结束后,以便检查所有的单词。
3. 在 `while` 循环中,当 `n` 变为空格时,应该返回字符串 `'NOT FOUND'`。
4. `words=input().split()` 这行代码无法在函数内部使用,应该在函数外部使用,并将结果传递给函数。
以下是修正后的代码:
```python
def func(words):
n = words[0]
for word in words[1:]:
while not word.startswith(n):
n = n[:-1]
if n == "":
return 'NOT FOUND'
return n
words = input().split()
print(func(words))
```