首先,while numberRangeLow < numberRangeHigh+1: do stuff
與range
基本相同。
對於相同的結果,您可以使用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_this
和notLikeThis
被認爲是更好的做法。編輯: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)
所以,numbers = numbers [list_index + 1:] ...我在哪裏尋找這個東西, –
點擊鏈接列表切片,它給出了一個基本的例子,將得到更好的解釋我的嘗試:P基本上,'[a:b]'意味着跳過第一個'a'和最後'b'值,所以'[a:]'意味着切斷第一個'a'值,而不是任何事情結束。 – Peter