首先,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