2011-08-31 126 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