2016-11-15 13 views
0

我還在學習編碼的早期階段,所以很抱歉如果代碼是不可靠的... 我正在做一個數字猜測遊戲,根據兩個數字的第一個猜測用戶給出然後將這些數字放入列表中。那麼我的問題,我想刪除的數字下/從我第一次的猜測高於只是做random.choice(名單)代碼遵循....從列表中刪除小於變量的數字

import random 
print("\nLets see if I can guess the number you're thinking.\nI've got some questions first") 
tryNumber=1 
trys=int(input("How many trys will you let me have? ")) 
numberRangeLow=int(input("What is the lowest number I can guess?: ")) 
numberRangeHigh=int(input("And the highest?: ")) 

print("\nSo I have",str(trys),"trys") 
print("And the number is between",str(numberRangeLow),"and",str(numberRangeHigh)+".\n") 
firstGuess=random.randint(numberRangeLow, numberRangeHigh) 
numbers=[] 
nums=[] 
while numberRangeLow < numberRangeHigh+1: 
    numbers.append(numberRangeLow) 
    nums.append(numberRangeLow) 
    numberRangeLow+=1 

while tryNumber < trys: 
    print("Is your number", str(firstGuess), "?") 
    answer=input("Enter 'higher', 'lower' or correct (Case-Sensitive)") 
    if answer == "higher": 
     numbers.remove('''nums >= firstGuess''') 
     firstGuess=random.choice(numbers) 
     print("Is your number", str(firstGuess), "?") 

我不舒服的功能,只是還沒有這爲什麼這麼多。一旦我得到這個完美的生病,就把它改爲調用整個事物的函數。 -hopefully-

回答

0

首先,while numberRangeLow < numberRangeHigh+1: do stuffrange基本相同。
對於相同的結果,您可以使用numbers = range(numberRangeLow, numberRangeHigh + 1),這將爲您建立清單。

你也不需要警告它是區分大小寫的,如果你使用str.lower()它會自動把它寫成小寫。例如,你可以做if answer.lower() == "higher"

要刪除號碼,你可以做list slicing。例如,如果您有a = [1, 2, 3, 4]且低於3,則可以使用a.index(3)(在本例中爲2)得到索引3。
然後,通過用a[2:]刪除高於此索引的任何內容,您已刪除任何高於3的數字。

下面是對我所提到的位進行快速更新的代碼。

trys=int(input("How many trys will you let me have? ")) 
numberRangeLow=int(input("What is the lowest number I can guess?: ")) 
numberRangeHigh=int(input("And the highest?: ")) 
print("\nSo I have",str(trys),"trys") 
print("And the number is between",str(numberRangeLow),"and",str(numberRangeHigh) 

#New bits: 
numbers = range(numberRangeLow, numberRangeHigh + 1) 
for i in range(trys): 
    guess = random.choice(numbers) 
    print("Is your number", str(guess), "?") 
    answer = input("Enter 'higher', 'lower' or 'correct'").lower() 
    if answer == 'correct': 
     break 
    elif answer == 'higher': 
     list_index = numbers.index(guess) 
     numbers = numbers[list_index + 1:] 
    elif answer == 'lower': 
     list_index = numbers.index(guess) 
     numbers = numbers[:list_index] 

我重新安排了代碼的最後部分,所以你沒有2個隨機選擇的副本。同樣爲了記錄,name_variables_like_thisnotLikeThis被認爲是更好的做法。編輯:Kevins的方式與我的略有不同,一個簡單的比較就是假設你已經在紙上寫下了數字,這樣會把紙撕成兩半並丟棄一部分,而Kevins的方式會寫出來再次放在一張新紙上,這樣你可以獲得更多的控制權,但速度會慢一些。

編輯2: 由於我很無聊,我寫了它如何做一個函數(有一些意見)。請記住它是python 2而不是python 3我正在使用,所以複製+粘貼將不起作用。

def number_guess(tries, low, high): 

    #Error if low is more than or the same as high 
    if low >= high: 
     raise ValueError('invalid range') 

    #Build number list 
    num_list = range(low, high + 1) 
    print 'I have got {} tries'.format(tries) 
    print 'And the number is between {} and {}'.format(low, high) 

    for i in range(tries): 
     guess = random.choice(num_list) 
     print 'Is {} your number?'.format(guess) 
     answer = input('Enter higher, lower or correct').lower() 

     #Empty answer 
     if not answer: 
      continue 

     #Correct answer 
     if answer[0] in ('c', 'y'): 
      print 'I guessed in {} tries'.format(i) 
      return True 

     #Number is higher 
     if answer[0] == 'h': 
      list_index = num_list.index(guess) 
      num_list = num_list[list_index + 1:] 

     #Number is lower 
     elif answer[0] == 'l': 
      list_index = num_list.index(guess) 
      num_list = num_list[:list_index] 

    #If it hits this point there are no tries left 
    print 'I failed to guess' 
    return False 

tries = int(input('How many tries will you let me have?')) 
low = int(input('What is the lowest number I can guess?')) 
high = int(input('And what is the highest?')) 

success = number_guess(tries, low, high) 
+0

所以,numbers = numbers [list_index + 1:] ...我在哪裏尋找這個東西, –

+0

點擊鏈接列表切片,它給出了一個基本的例子,將得到更好的解釋我的嘗試:P基本上,'[a:b]'意味着跳過第一個'a'和最後'b'值,所以'[a:]'意味着切斷第一個'a'值,而不是任何事情結束。 – Peter

0

更改numbers.remove('''nums >= firstGuess''')numbers.remove(firstGuess)您還需要考慮大於您的第一次猜測的數字,因此您必須刪除之前的數字。 numbers = ([x for x in numbers if x > firstGuess])應該做的伎倆。

while tryNumber < trys: 
    print("Is your number", str(firstGuess), "?") 
    answer=input("Enter 'higher', 'lower' or correct (Case-Sensitive)") 
    if answer == "higher": 
     numbers = ([x for x in numbers if x > firstGuess]) 
     firstGuess=random.choice(numbers) 

這應該讓你開始。

+0

究竟是「x for x in numbers」呢?我明白,如果x大於firstGuess –