我正在尝试从 Python 中的 word2 的字母制作 word1

I am trying to make word1 from the letters of word2 in Python

word1 = input() 
word2 = input()
a = len(word2)
b = len(word1)
count = b
while (word2[a-1] == word1[b-1]):
    count-=1
    a -= 1
    if count == 0:
        break
    else:
        print('it cant be made')
b-=1
print('it can be made')  

我想做的是比较 word2 的最后一个字母和 word 1 的最后一个字母,如果它们相等,- 计数减 1 并向下移动 word 2 中的一个字母,直到计数为 ==到 0 因此可以提出这个词。 如果这 2 个字母不相等,它应该移动到 word1 的下一个字母并重复该过程。如果计数未达到 0,则无法合成该词,因为它是您要合成的词的 Len。

这是我 运行 代码时发生的情况:

bru
kinn
it can be made
>>> 
= RESTART: /Users/nicksuciu/Documents/python work/section b make word from word2.py
bru
kibun
it can be made
>>> 
= RESTART: /Users/nicksuciu/Documents/python work/section b make word from word2.py
bru
kibun
it can be made
>>> 

在所有测试用例中,while 循环会立即退出,因为最后的字母不相等。您的代码编写方式,完成 while 后的结果是在退出前打印“可以制作”,而不管循环内发生了什么,因此您将始终获得该输出。

通过对两个词一起进行单次迭代来解决这个问题是很困难的,因为可能字母的顺序可能不同;在许多情况下,您很可能会“错过”一封信。更简单的解决方案是使用dicts统计每个单词中的字母,然后比较计数。这是一个使用 collections.Counter:

的例子
from collections import Counter

word1 = Counter(input())
word2 = Counter(input())
if all(word2[char] >= word1[char] for char in word1):
    print('it can be made')
else:
    print('it cant be made')
>python test.py
bru
kibun
it cant be made

>python test.py
bru
kribun
it can be made