[英]remove numbers from a list less than variable
我还很早开始学习编码,所以对不起,如果代码太古怪了……我正在做一个数字猜谜游戏,它基于用户给出的两个数字的第一个猜测进行猜测,然后将这些数字按升序排列。 然后我的问题,我想从我的第一个猜测中删除较低/较高的数字,然后执行以下random.choice(list)代码...。
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), "?")
我对函数还不满意,这就是为什么这么多的原因。 一旦我病倒了,就将其更改为整个函数都调用。 -希望-
将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)
这应该使您入门。
首先, while numberRangeLow < numberRangeHigh+1: do stuff
基本上与range
相同。
对于相同的结果,可以使用numbers = range(numberRangeLow, numberRangeHigh + 1)
,这将为您构建列表。
您也不需要警告它区分大小写,如果使用str.lower()
它将自动将其转换为小写。 例如, if answer.lower() == "higher"
可以这样做。
要删除数字,您可以进行列表切片 。 例如,如果您有a = [1, 2, 3, 4]
,并且小于3,则可以使用a.index(3)
获得索引a.index(3)
,在这种情况下,将得到2。
然后使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.