【问题标题】:How can I repeat the sentence on the basis of integer input?如何在整数输入的基础上重复句子?
【发布时间】:2021-09-18 02:52:19
【问题描述】:

Sheldon Cooper 曾经敲过 Penny 的门。众所周知,他会说“敲门!敲!敲!一分钱!敲!敲!敲!一分钱! ……”。他继续敲门,直到佩妮开门。每个单词需要一秒钟。如果 Penny 在 N(input) 秒后开门,那么写一个 python程序打印出当时生成的整个句子。 注意:您的程序中只有一个输入 N。 对于这个问题,我的代码是:

str = "knock!knock!knock!penny"
#split string
splits = str.split()

#for loop to iterate over words array
for split in splits:
  print(split)

我可以访问这句话中的每个单词,或者我可以只写半个句子。但我不能让它遍历句子。 我的输出应该是: 输入:6 输出:敲!敲!敲!便士!敲!敲!

【问题讨论】:

    标签: python string loops


    【解决方案1】:

    你可以试试itertools.cycle这样-

    import itertools
    
    str = "knock!knock!knock!penny"
    splits = str.split('!')
    
    n = 6
    gen =  itertools.cycle(splits)
    print("!".join(next(gen) for _ in range(n)))
    

    在您的代码中,您尝试 split() 它而不提供分隔符(在您的情况下为 !)。

    拆分后,您可以将您的列表提供给itertools.cycle。这将在列表中一个一个地迭代,并且在所有元素都被迭代之后,它会回到第一个元素并无休止地这样做。

    join() 中的 for 循环将只在输出中生成那么多单词,并且每两个单词之间将由 ! 连接。

    【讨论】:

      【解决方案2】:

      如果你使用 sleep 和类似这样的循环,实现起来非常简单,

      import time
      input_string = "knock!knock!knock!penny"
      splitted = input_string.split('!')
      
      def show_knock():
          knocking = int(input("Enter Time in second : "))
          count = 0
          otp_list = []
          for i in range(knocking):
              tmp = f"{splitted[count]}!"
              otp_list.append(tmp)
              if count == 3:
                  count =0
              else:
                  count+=1
              time.sleep(1)
          print(''.join(otp_list))  # '!'.join(otp_list) can be used here instead of f String
      
      

      输入 6 的输出为 knock!knock!knock!penny!knock!knock!

      【讨论】:

        【解决方案3】:

        你可以试试这个。

        import time
        str2 = "knock!knock!knock!penny"
        #split string
        splits = str2.split('!')
        
        #for loop to iterate over words array
        j=int(input('Enter number: '))
        newl=[]
        x=0
        for split in range(j):
            if x==3:
                
                newl.append(splits[x])
                x=0
            else:
                
                newl.append(splits[x])
                x+=1
             time.sleep(1)
        print('!'.join(newl))
        

        【讨论】:

        • 非常感谢您的回答。它正在工作。
        • 欢迎,如果能解决问题请采纳我的回答@MalihaKabir
        猜你喜欢
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多