Python 有人能解释一下我是如何让这个代码工作的吗?

Python 有人能解释一下我是如何让这个代码工作的吗?,python,Python,几天前我们做了一个实验,我们必须按字母顺序打印一个单词的字母数。同一封信不得重复打印。出于某种原因,我通过键入条件if x[I]==x[I-1]来实现它,但回家后,我无法理解我是如何想出这个方法的,以及它是如何工作的。有人能给我解释一下它是怎么工作的吗?即使成功了,我还是想知道“如果”条件背后的逻辑。谢谢,再见 word = (sorted(str.upper(raw_input("Enter your word(s): ")))) def counts(x): for i in ra

几天前我们做了一个实验,我们必须按字母顺序打印一个单词的字母数。同一封信不得重复打印。出于某种原因,我通过键入条件if x[I]==x[I-1]来实现它,但回家后,我无法理解我是如何想出这个方法的,以及它是如何工作的。有人能给我解释一下它是怎么工作的吗?即使成功了,我还是想知道“如果”条件背后的逻辑。谢谢,再见

word = (sorted(str.upper(raw_input("Enter your word(s): "))))

def counts(x):
    for i in range(len(x)):
        count = 0
        for g in range(len(x)):
            if x[g] == x[i]:    count += 1
            else:   continue
        if x[i] == x[i-1]:
            continue
        else:
            print x[i],"occurs", count,"times."

counts(word)

对我来说,如果x[i]==x[i-1]:,这在
上也没有任何意义。它只是一个
if
语句来判断左边的单词是否与其对应的单词相同

但我可以帮你简化

def counts(x):
    for alpha in sorted(set(x)):
        print alpha,"occurs", x.count(alpha),"times."

if
statement

 if x[i] == x[i-1] 
当当前字符与上一个字符相同时,禁止打印任何内容。 我想这个程序是用来计算输入的
单词中
字符数的。它首先收集单词变量并对其进行分类。然后,通过循环单词的长度,它会比较每个字符的实例数。您可能需要调用定义的函数计数,如下所示:

word = (sorted(str.upper(raw_input("Enter your word(s): "))))

def counts(x):
    for i in range(len(x)):
        count = 0
        for g in range(len(x)):
            if x[g] == x[i]:    count += 1
            else:   continue
        if x[i] == x[i-1]:
            continue
        else:
            print x[i],"occurs", count,"times."

print counts(word)
在行动中看到它,我输入了“Hello world”:

在第一行

word = (sorted(str.upper(raw_input("Enter your word(s): "))))  
您的输入按字母顺序排序,并改为大写。
Ex)香蕉->AAABNN
像上面的例子一样,相同的字符被不断地收集。
其次,

此代码迭代我们的输入。
在第一次迭代中,x[0]是A.
然后呢,

for g in range(len(x)):
        if x[g] == x[i]:    count += 1
        else:   continue
此代码统计连续的相同字符数。
在第一次迭代中,x[0]=A,在AAABNN中有三个As。
所以计数是2。
但没有

if x[i] == x[i-1]:
        continue
它打印
A出现3次。
因为x[1]和x[2]。
因此,您可以使用上述代码跳过x[1]和x[2]的迭代。
您的代码可以这样优化

def counts(x):
    count = 0
    prev_character = x[0]
    while len(x) > 0:
        curr_character = x[0]
        if prev_character == curr_character:
            count += 1
            x.pop(0)
        else:
            print prev_character, "occurs", count, "times."
            prev_character = curr_character
            count = 0
    if count > 0:
        print prev_character," occurs", count, "times."

是的,乍一看我也不知道它是怎么工作的。虽然我很确定我可以通过调试器来跟踪它,这是一个你可以自己做的练习。但是你最好把精力集中在编写更容易理解的代码上,因为你的单词列表是一个单独字符的排序列表。因此,您提到的条件x[i]==x[i-1]是一种仅使用单个字符第一次出现的方法。我鼓励您在外部和内部循环中使用一些print语句,以观察代码的实际工作方式。啊,没错。错过了排序的部分。@Guillaume:这种责骂有什么帮助?OP正在真诚地努力学习。即使是有经验的开发人员有时也会看到旧代码,然后想“等等,我的逻辑是什么?”这只是一个初学者,有着更为压缩的经验版本。@StevenRumbalski感谢您的理解。我几周前刚开始学习Python,之前没有开发经验,所以我很高兴见到像你这样的人,他们尽可能地帮助像我这样的新手。我已经改变了答案来反映这一点。从技术上讲,“香蕉->AAABNN”应该是“香蕉->
['a'、'a'、'B'、'N']
”,这让我头脑清醒了。谢谢你的详细解释@StevenRumbalski哦,你说得对!我错过了。谢谢:)我很高兴帮助你!
def counts(x):
    count = 0
    prev_character = x[0]
    while len(x) > 0:
        curr_character = x[0]
        if prev_character == curr_character:
            count += 1
            x.pop(0)
        else:
            print prev_character, "occurs", count, "times."
            prev_character = curr_character
            count = 0
    if count > 0:
        print prev_character," occurs", count, "times."