【问题标题】:Printing one character at a time from a string, using the while loop使用 while 循环从字符串中一次打印一个字符
【发布时间】:2013-03-05 10:31:38
【问题描述】:

我正在阅读“Core Python Programming 2nd Edition”,他们要求我使用“while”循环一次打印一个字符串。

我知道 while 循环是如何工作的,但由于某种原因,我想不出如何做到这一点。我一直在环顾四周,只看到使用 for 循环的示例。

那我该怎么办:

用户提供输入:

text = raw_input("Give some input:  ")

我知道如何从数组中读出每条数据,但我不记得如何对字符串执行任何操作。

现在我只需要运行 while 循环,它会打印字符串的每个字符,一次一个。

我想我必须使用 len(text),但我不能 100% 确定如何在这个问题中使用它。

一些帮助会很棒!我确信这是一个非常简单的问题,但由于某种原因我无法想出它!

提前谢谢! :)

【问题讨论】:

  • 请添加一些代码向我们展示您的尝试,我们将不胜感激! :)

标签: python while-loop


【解决方案1】:

我很确定,互联网上到处都是 python while-loops,但举个例子:

i=0

while i < len(text):
    print text[i]
    i += 1

【讨论】:

  • 是的,互联网上到处都是 python while-loops :) 我以前用过它们。但我无法完全弄清楚如何让它一次打印一个字符串的 1 个字符!感谢您的帮助!
  • 你可能想阅读 Python 教程 => Strings
【解决方案2】:

字符串可以有for循环:

for a in string:
    print a

【讨论】:

    【解决方案3】:

    其他答案已经为您提供了使用while 循环(或for 循环)迭代字符串所需的代码,但我认为解释两种循环类型之间的区别可能很有用。

    while 循环重复一些代码,直到满足某个条件。例如:

    import random
    
    sum = 0
    while sum < 100:
        sum += random.randint(0,100) #add a random number between 0 and 100 to the sum
        print sum
    

    此代码将不断添加 0 到 100 之间的随机数,直到总数大于或等于 100。重要的是,此循环可以只运行一次(如果第一个随机数是 100)或者它可以永远运行(如果它一直选择 0 作为随机数)。在完成之前,我们无法预测循环将运行多少次。

    for 循环基本上只是 while 循环,但是当我们希望循环运行预设次数时我们会使用它们。 Java for 循环通常使用某种计数器变量(下面我使用i),并且通常使whilefor 循环之间的相似性更加明确。

    for (int i=0; i < 10; i++) { //starting from 0, until i is 10, adding 1 each iteration
        System.out.println(i);
    }
    

    此循环将运行 10 次。这是写这个更好的方式:

    int i = 0;
    while (i < 10) { //until i is 10
       System.out.println(i);
       i++; //add one to i 
    }
    

    for 循环最常见的用法是遍历一个列表(或字符串),Python 使这很容易:

    for item in myList:
        print item
    

    for character in myString:
        print character
    

    但是,您不想使用for 循环。在这种情况下,您需要使用其索引查看每个字符。像这样:

    print myString[0] #print the first character
    print myString[len(myString) - 1] # print the last character.
    

    知道您可以只使用while 循环和一个计数器来创建一个for 循环,并且知道您可以通过索引访问单个字符,现在应该很容易使用@ 一次访问每个字符987654338@循环。

    但是通常在这种情况下您会使用for 循环,因为它更易于阅读。

    【讨论】:

    • 这很有帮助!我知道如何与两者一起工作,但这让我对我在做什么有更多的了解!多谢! :D
    【解决方案4】:

    试试这个过程:

    def procedure(input):
        a=0
        print input[a]
        ecs = input[a] #ecs stands for each character separately
        while ecs != input:
            a = a + 1
            print input[a]
    

    为了使用它,你必须知道如何使用程序,虽然它有效,但它最终会出现错误,所以你也必须解决它。

    【讨论】:

      【解决方案5】:

      Python 允许您使用字符串作为迭代器:

      for character in 'string':
          print(character)
      

      我猜你的工作是弄清楚如何将它变成一个 while 循环。

      【讨论】:

      • 你是对的,这是人们在 99.9% 的时间里遍历字符串的方式,但 OP 明确声明他们不想使用 for 循环
      • 我想我不会直接提供答案,因为这似乎是一个任务,但提供 str 本身是可迭代的提示。
      【解决方案6】:
         # make a list out of text - ['h','e','l','l','o']
         text = list('hello') 
      
         while text:
             print text.pop()
      

      :)

      在 python 中,空对象被评估为 false。 .pop() 删除并返回列表中的最后一项。这就是它反向打印的原因!

      但可以通过以下方式修复:

      text.pop( 0 )
      

      【讨论】:

        【解决方案7】:

        Python 代码:

        for s in myStr:
                print s
        

        for i in xrange(len(myStr)):
            print myStr[i]
        

        【讨论】:

          【解决方案8】:

          试试这个...

          使用 while 循环打印每个字符

          i=0
          x="abc"
          while i<len(x) :
              print(x[i],end=" ")
              print(i)
              i+=1
          

          【讨论】:

          • 答案很好,但如果能得到一些关于解决方案的详细信息,那就太好了,特别是因为这个问题正在发展编程的基本和基础方面,这意味着提出问题的人可能是新手。并且切中要害:a。什么是结束参数(我猜在每个字符后添加空格) b。不需要打印索引 (i),但我怀疑您在运行解决方案时将其用于调试和提高清晰度
          • 是的..不需要打印索引...但是要知道代码是如何工作的...我在初学者级别使用它
          • 当然,这样做是个好主意,我只是指出值得在该行上发表评论,告诉它是为了帮助理解而不是真正需要的解决方案。
          【解决方案9】:

          这将打印文本中的每个字符

          text = raw_input("Give some input:  ")
          for i in range(0,len(text)):
             print(text[i])
          

          【讨论】:

          • 这不能回答问题。
          • 是的。基本上如何遍历字符串。
          • 这个问题明确要求一个while循环。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-23
          • 2017-06-25
          • 1970-01-01
          • 2014-07-06
          • 1970-01-01
          • 2014-03-06
          • 1970-01-01
          相关资源
          最近更新 更多