2016-11-15 42 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 –