2011-08-31 127 views
8

我是一名蟒蛇新手,并被要求使用while和for循环进行一些练习。我被要求做一个程序循环,直到用户请求退出只有<Return>。到目前为止,我有:用户按ENTER键退出while循环

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> 

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

+0

哦,'break'也应该是小写。而且你需要缩进更多的线以进入循环。 –

回答

2

使用打印语句可以查看当您点击enter时返回的内容raw_input。然后改变你的测试来比较。

+0

打印语句是空白的,所以我已经尝试过用户=='',但仍然这条线突出显示为无效语法 – Candace

+2

这样做:'print repr(User)'。 –

+1

raw_input将不会捕获 2013-03-11 20:57:46

0

您只需按Enter键即可找出变量User的外观。我不会给你完整的答案,而是一个提示:解雇一名口译员并尝试一下。这不是那么难;)请注意,打印的默认是'\ n'(太多了:o)

+0

我试图使用打印语句来做到这一点,变量是空白的,所以我试图用户=='',但这会导致无效的语法,就像用户=='\ n' – Candace

+1

为什么应该你在做'User ==“'?”是无效的语法。我会更多地帮助你(尽管这实际上非常明显):'print repr(raw_input())',然后按回车。 – naeg

-2

如果你想让你的用户按回车,那么raw_input()将返回“”,所以比较用户用“”:

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

我已经尝试过,但第5行依然突出显示为无效语法 – Candace

+0

oops,对不起忘了“:” –

+0

您还需要在'else'之后有一个':',并且'running == 1'是一个布尔表达式而不是一项任务。 – martineau

0
if repr(User) == repr(''): 
    break 
+0

这行仍然被突出显示为无效的语法 – Candace

+0

,不能是:)。我已经测试过它... – hymloth

4

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

  1. 如果您在Python 3.0使用Python 2.7版raw_input()input(),程序等待用户按一个键。
  2. 如果您不希望程序等待用户按下某个键但仍想运行代码,那么您需要做一些更复杂的事情,您需要在msvcrt模块中使用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

我希望这可以帮助你得到你的工作做好。

-1

这里有一个解决方案(类似原)的作品:

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子句中,有一个double-equal而不是equal。这不会执行任务,它是一个无用的比较表达式。
  4. 它不需要运行变量,因为if子句执行break
13

我跑进这个页面的同时(没有双关语)寻找别的东西。以下是我使用:

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

简单,有效,pythonic。 – 2rs2ts

+0

在Python 2中引发'SyntaxError:意外的EOF,同时解析'。使用'raw_input'可能会修复,但我没有尝试过。 –

10

你想要的确切的事情;)

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 
+0

这是一个很好的答案。这里是(我相信)原始来源,它有关于非阻塞stdin的更多信息:https://repolinux.wordpress.com/2012/10/09/non-blocking-read-from-stdin-in-python/ – Blairg23

0

一个非常简单的解决办法是,我看到你说你 想看到最简单的解决方案。 提示输入用户停止循环等等

raw_input("Press<enter> to continue") 
0
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. 
''' 
+1

您需要提供一些讨论,解释您的答案如何解决问题。 – Phil

0

后继续在这里是最好的,最简单的答案。使用尝试和除了电话。

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." 
0

你快到了。完成这项工作的最简单方法是搜索一个空变量,这是您在按输入请求输入时得到的。下面我的代码是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...') 
0

从我下面的作品:

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

请解释你的代码,还有什么能让其他答案没有。 – Nic3500

0

本工程为蟒蛇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() 
+0

一些非常小的挑剔:'flag = 1' - >'flag = True'。 '而标志== 1' - >'而标志'。 'if flag == False:' - >'if not flag:'。如果你想写一个变量,你只需要声明'global',所以你可以从'normal()'中移除'global flag'。 – user136036