2014-11-13 56 views
-1

我正在寫一個簡短的程序,用戶必須猜測1-999之間的隨機數,然後告訴您是否您的猜測低於或高於計算機生成的隨機數。我希望把它使我這個代碼如何使輸入成爲只有數字並且不允許超過一定數量的字符?

guess = int(raw_input("Guess a number, 1-999")) 

如果鍵入的字符數大於3,我想刪除輸入的最後一個號碼。

例如,如果4563是輸入,我想要程序刪除3,並使數字456.

另外,我想這樣做,如果有人輸入a,它不會被接受。這裏

編輯是完整的代碼

from random import randint 
randNum = randint(1,999) 
guess = int(raw_input("Guess a number, 1-999")) 
tries = 1 
while guess != randNum: 
    tries += 1 
    if guess > randNum: 
     print "Guess lower" 
    elif guess < randNum: 
     print "Guess higher" 
    guess = int(raw_input("Guess a number, 1-999")) 
print "You guessed the right number in " + str(tries) + " tries" 

我想guess變量是一個只需要數至少有1和3或更低的數字。

編輯

我想有類似的遊戲Oregon Trail其中在休息站,你只能輸入數字1-9和任何其他輸入,第二個數字或字母的任何被刪除的東西。

+4

首先寫一個代碼做一些事情,然後這裏有人可以幫忙,沒有人會爲你寫程序。 – najjarammar

+0

你似乎沒有努力實現你所描述的內容。這不是一個代碼寫入服務; **嘗試一下**。 – jonrsharpe

回答

1

您可以使用以下方法:

s = input("My input ") # for 2.x it will be raw_input  
s = int(s) if len(s) <= 3 else int(s[0:3])  
+0

爲什麼要用'str'將'[raw_] input'(**已經是一個字符串**)? – jonrsharpe

+0

以及如果放置aaa^_ ^,您必須控制用戶發送數字以外的東西! – Abdelouahab

+1

@Abdelouahab:P讓他自己想象一下lolz – ha9u63ar

0

如果你想削減從字符串只有數字,你可以使用正則表達式這樣的:

import re 

digits = re.findall('\d', 'asdf23432asdf23') # find all digits in string 
number = int(''.join(digits)) 

如果你想最後的數字從int切割:

number = ''.join(digits) # join chars to string 
if len(number) > 3: 
    number = number[:3] 

number = int(number) 
0

我不認爲你在想正確的方法。當用戶給你不好的輸入時,不要試圖猜測他的意思。就罵他,讓他再試一次:)你必須包裹int(...)中的呼叫try塊防止錯誤輸入,比如"foobar",然後檢查是否輸入是介於0和1000

0

偷懶的方法:

你做兩個控制,長度和類型:

if len(number) in [1, 2, 3] : # changed from <= because 0 is less than 3 ... 
    try: 
     number = int(number) 
    except ValueError: 
     print 'we need numbers!' 
else: 
    print '3 chars only!' 
+0

爲什麼你用「len(number)in [1,2,3]」來代替「len(number)<4」? – Jimilian

+0

用戶可以不輸入任何內容,我已經使用<= 3但改變了它,以防有人把東西放入空 – Abdelouahab

+1

我認爲更多的pythonic將是「如果數量和len(數量)<4」 – Jimilian

0

我的解決辦法是:

import re 
number = int(re.sub('\D', '', raw_input("Guess a number, 1-999: "))[:3]); 
0

Python3方式...

from random import randint 

def getGuess(): 
    while True: 
     guess = input("Guess a number, 1-999\t\t") 
     valid = errorCheck(guess) 
     if valid == True: 
      return int(guess) 
     else: 
      pass 

def errorCheck(x): 
    try: 
     x = int(x) 
    except ValueError: 
     print("Invalid input, not an integer") 
    if x in list(range (1, 999)): 
     return True 
    else: 
     print() 
     print("Input is not within the data range.") 
     return False 

randNum = randint(1,999) 
tries = 0 
while True: 
    guess = getGuess() 
    tries += 1 
    if guess > randNum: 
     print ("Guess lower") 
    elif guess < randNum: 
     print ("Guess higher") 
    else: 
     print ("You guessed the right number in ", str(tries), " tries") 
     break 
相關問題