【问题标题】:Exit while loop by user hitting ENTER key用户按 ENTER 键退出 while 循环
【发布时间】:2011-11-07 12:01:09
【问题描述】:

我是 python 新手,被要求使用 while 和 for 循环进行一些练习。我被要求进行程序循环,直到用户仅点击<Return> 请求退出。到目前为止,我有:

User = raw_input('Enter <Carriage return> only to exit: ')
running = 1
while running == 1:
    Run my program
if User == # Not sure what to put here
    Break
else
    running == 1

我已经尝试过:(按照练习中的说明)

if User == <Carriage return>

还有

if User == <Return>

但这只会导致语法无效。 请你告诉我如何以最简单的方式做到这一点。 谢谢

【问题讨论】:

  • 哦,break 也应该是小写的。而且你需要缩进更多的行才能进入循环。

标签: python while-loop


【解决方案1】:

我在(没有双关语)寻找其他东西时遇到了这个页面。这是我使用的:

while True:
    i = input("Enter text (or Enter to quit): ")
    if not i:
        break
    print("Your input:", i)
print("While loop has exited")

【讨论】:

  • 简单、有效、pythonic。
  • 在 Python 2 中引发 SyntaxError: unexpected EOF while parsing。使用 raw_input 可能会解决问题,但我还没有尝试过。
【解决方案2】:

你想要的确切的东西;)

https://stackoverflow.com/a/22391379/3394391

import sys, select, os

i = 0
while True:
    os.system('cls' if os.name == 'nt' else 'clear')
    print "I'm doing stuff. Press Enter to stop me!"
    print i
    if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
        line = raw_input()
        break
    i += 1

【讨论】:

【解决方案3】:

实际上,我想您正在寻找一个运行循环的代码,直到从键盘按下一个键。当然,程序不应该一直等待用户进入。

  1. 如果你在python 2.7中使用raw_input()或者在python 3.0中使用input(),程序会等待用户按键。
  2. 如果您不希望程序等待用户按键但仍想运行代码,那么您需要做一些更复杂的事情,您需要在@987654321 中使用kbhit() 函数@模块。

实际上,ActiveState 中有一个解决此问题的方法。请关注此link

我认为以下链接也可以帮助您更好地理解。

  1. python cross platform listening for keypresses

  2. How do I get a single keypress at a time

  3. Useful routines from the MS VC++ runtime

我希望这可以帮助您完成工作。

【讨论】:

    【解决方案4】:

    使用打印语句查看当您点击enterraw_input 返回的内容。然后更改您的测试以与之进行比较。

    【讨论】:

    • 打印语句是空白的,所以我尝试了 User == '' 但这行仍然突出显示为无效语法
    • raw_input 不会捕获
    【解决方案5】:

    这适用于使用并行线程的 python 3.5。您可以轻松地将其调整为仅对特定按键敏感。

    import time
    import threading
    
    
    # set global variable flag
    flag = 1
    
    def normal():
        global flag
        while flag==1:
            print('normal stuff')
            time.sleep(2)
            if flag==False:
                print('The while loop is now closing')
    
    def get_input():
        global flag
        keystrk=input('Press a key \n')
        # thread doesn't continue until key is pressed
        print('You pressed: ', keystrk)
        flag=False
        print('flag is now:', flag)
    
    n=threading.Thread(target=normal)
    i=threading.Thread(target=get_input)
    n.start()
    i.start()
    

    【讨论】:

    • 一些非常小的吹毛求疵:flag = 1 -> flag = Truewhile flag==1 -> while flagif flag==False: -> if not flag:。如果你想写入一个变量,你只需要声明global,这样你就可以从normal()中删除global flag
    【解决方案6】:

    您需要找出当您按下 Enter 时变量 User 的样子。我不会给你完整的答案,而是一个提示:解雇一名口译员并尝试一下。这并不难;)请注意,默认情况下 print 的 sep 是 '\n' (是不是太多了:o)

    【讨论】:

    • 我尝试使用打印语句来执行此操作,但变量为空白,因此我尝试了 User == '' 但这会导致语法无效,User == '\n' 也是如此
    • 你为什么要这么做User == "? " 是无效的语法。我会为您提供更多帮助(尽管这实际上很明显):print repr(raw_input()) 然后按回车键。
    【解决方案7】:
    if repr(User) == repr(''):
        break
    

    【讨论】:

    • 此行仍以无效语法高亮显示
    【解决方案8】:

    一个非常简单的解决方案是,我看到你说过你 希望看到最简单的解决方案。 停止循环后提示用户继续等。

    raw_input("Press<enter> to continue")
    

    【讨论】:

      【解决方案9】:
      user_input=input("ENTER SOME POSITIVE INTEGER : ")
      if((not user_input) or (int(user_input)<=0)):    
         print("ENTER SOME POSITIVE INTEGER GREATER THAN ZERO") #print some info
         import sys        #import
         sys.exit(0)       #exit program 
      '''
      #(not user_input) checks if user has pressed enter key without entering  
      # number.
      #(int(user_input)<=0) checks if user has entered any number less than or 
      #equal to zero.
      '''
      

      【讨论】:

      • 您需要提供一些讨论,解释您的答案如何解决问题。
      【解决方案10】:

      这是最好和最简单的答案。使用 try 和 except 调用。

      x = randint(1,9)
      guess = -1
      
      print "Guess the number below 10:"
      while guess != x:
          try:
              guess = int(raw_input("Guess: "))
      
              if guess < x:
                  print "Guess higher."
              elif guess > x:
                  print "Guess lower."
              else:
                  print "Correct."
          except:
              print "You did not put any number."
      

      【讨论】:

        【解决方案11】:

        你快到了。完成此操作的最简单方法是搜索一个空变量,这是在输入请求中按 enter 时得到的。我下面的代码是 3.5

        running = 1
        while running == 1:
        
            user = input(str('Enter <Carriage return> only to exit: '))
        
            if user == '':
                running = 0
            else:
                print('You had one job...')
        

        【讨论】:

          【解决方案12】:

          这是一个可行的解决方案(类似于原始解决方案):

          User = raw_input('Enter <Carriage return> only to exit: ')
          while True:
              #Run my program
              print 'In the loop, User=%r' % (User, )
          
              # Check if the user asked to terminate the loop.
              if User == '':
                  break
          
              # Give the user another chance to exit.
              User = raw_input('Enter <Carriage return> only to exit: ')
          

          请注意,原问题中的代码有几个问题:

          1. if/else 在 while 循环之外,因此循环将永远运行。
          2. else 缺少一个冒号。
          3. 在 else 子句中,有一个双等号而不是等号。这不执行赋值,它是一个无用的比较表达式。
          4. 它不需要运行变量,因为if 子句执行break

          【讨论】:

            【解决方案13】:

            如果你想让你的用户按回车,那么 raw_input() 将返回 "",所以将 User 与 "" 进行比较:

            User = raw_input('Press enter to exit...')
            running = 1
            while running == 1:
                Run your program
            if User == "":
                break
            else
                running == 1
            

            【讨论】:

            • 我已经尝试过了,但第 5 行仍然突出显示为无效语法
            • else 之后还需要一个:,而running == 1 是一个布尔表达式而不是一个赋值。
            【解决方案14】:

            以下作品来自我:

            i = '0'
            while len(i) != 0:
                i = list(map(int, input(),split()))
            

            【讨论】:

            • 请解释您的代码,以及它带来了其他答案所没有的更多功能。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多