繁体   English   中英

从列表中删除小于变量的数字

[英]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_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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM