【问题标题】:Why does my Python program only allow for a certain sequence of inputs?为什么我的 Python 程序只允许特定的输入序列?
【发布时间】:2021-06-04 06:16:59
【问题描述】:

在这个程序中,用户必须输入序列的长度,然后在以下每个序列中输入一个单词。 python程序需要输出以相同首字母开头的相邻单词对的数量。在您输入诸如此类的输入之前,我下面的代码可以很好地执行此操作

示例 1: 输入:

Length of sequence: 2
1st word: blue
2nd word: black

预期输出:

Pairs of adjacent words: 1

我的代码输出:

pairs of adjacent words: 0

示例 2: 输入:

Length of sequence: 3
1st word: what
2nd word: who
3rd word: when

预期输出:

Pairs of adjacent words: 2

我的代码输出:

pairs of adjacent words: 0

这是我的代码:

n= int(input("Enter the length of the sequence:\n"))
current_letter = 'a'
count = 0
pairs = 0

for i in range (0,n):
    word = input('Enter word '+ str(i+1)+':\n')
    first_letter = word[:1]
    
    if current_letter == first_letter:
        count = count + 1
    else:
        if count > 0:
            pairs = pairs + 1
        count = 0
        current_letter = first_letter

print('Number of pairs of adjacent words with same first letter: '+ str(pairs))

正确输出示例:

Enter the length of the sequence:5
Enter word 1: how
Enter word 2: here
Enter word 3: who
Enter word 4: when
Enter word 5: you
Number of pairs of adjacent words with the same first letter: 2

【问题讨论】:

    标签: python


    【解决方案1】:

    您走在正确的轨道上,并且在逻辑方面做得非常好。进行一些简单的调整即可使代码正常工作。

    n= int(input("Enter the length of the sequence:\n"))
    current_letter = 'a'
    pairs = 0
    
    for i in range (0,n):
        word = input('Enter word '+ str(i+1)+':\n')
        first_letter = word[:1]
        if(current_letter == first_letter):
            pairs += 1
        current_letter = first_letter
    
    print('Number of pairs of adjacent words with same first letter: '+ str(pairs))
    

    继续加油!

    【讨论】:

      【解决方案2】:

      您似乎将current_letter = 'a' 放在第二行以测试您的代码。但是,当您运行程序时,您希望将current_letter 设置为实际的当前字母。要初始化current_letter,我会在循环开始之前调用一次input()。这使您可以从第一个单词中获取当前字母。然后,您只需少运行一次 for 循环。

      要计算具有相同首字母的相邻单词对的数量,您只需要使用单个pair 变量即可。这是我建议的代码:

      n = int(input("Enter the length of the sequence:\n"))
      pairs = 0
      
      first_word = input("Enter word 1:\n")
      current_letter = first_word[0]
      
      for i in range(n - 1):
          word = input("Enter word " + str(i + 2) + ":\n")
          first_letter = word[0]
          if current_letter == first_letter:
              pairs = pairs + 1
          else:
              current_letter = first_letter
      
      

      【讨论】:

      • 在界面设计中,要求用户输入多余的(可能是错误的)信息来解决程序错误是不合理的。此外,这并不能解决发布的问题。
      • 您好,抱歉我不明白。您能否解释一下“输入冗余信息”的含义。根据我的理解,第一个单词没有什么可比性,所以我建议用第一个单词的信息初始化当前字母。然后,第一个字母的比较可以从第二个单词开始。
      • 啊……我明白了。我的错误......我编辑了你的答案,所以我可以删除我的反对票。尽管如此,这并没有解决代码的主要问题。这应该是一条评论。
      • 谢谢,您说得对,代码还有其他一些问题。我将添加一些建议的代码来完成我的答案。
      【解决方案3】:

      您的问题是,只有当字母不同时,您才会计算新的一对。如果最后两个单词匹配,那么您永远不会计算匹配。事实上,任何时候你有多个连续的匹配,你只计算一个。给定输入

      who
      what
      where
      when
      how
      hold
      

      您的代码将只计算一个“对”,即第一个序列。

      根据您的描述,只要当前的起始字母等于前一个字母,就意味着计算一个“对”。说到这一点,不要使用用户可能偶然发现的值。用一个空字符串作为初始值来解决这个问题。

      current_letter = ''
      ...
      for ...
          if first_letter == current_letter:
              pairs += 1
      
      print("...", pairs)
      

      【讨论】:

        猜你喜欢
        • 2022-11-18
        • 1970-01-01
        • 2022-01-20
        • 2014-06-16
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 2019-02-09
        • 2021-04-02
        相关资源
        最近更新 更多