2012-10-30 65 views
2

現在我一直在嘗試尋找樂趣來製作我自己的遊戲線索版本,而且我似乎無法找到如何做到這一點。我試圖做到這一點,如果猜測是錯誤的,它會從其他猜測中得到暗示,這不是真正的「殺手」,這不是他們以前的任何猜測。我給的類似的例子:!給予隨機選擇的例外

a = input() 
    b = input() 
    c = input() 
    d = input() 
    e = input() 
    f = input() 
    hint = random.choice([a,b,c,d,e,f]) 
    hint != killer 
    hint != previous_guess 

現在我知道的提示=殺手,暗示= previous_guess並沒有真正做任何事情,因爲提示之前分配。我想知道是否有任何方法可以讓它從一個不是殺手的變量或之前的猜測中隨機選擇。提前致謝!哦,我也想指出,我正在使用python。

+0

如果'了'通過對'F'是玩家的猜測,那麼你的代碼目前要求六個猜測,選取隨機這些猜測之一,並使得'暗示!= killer'評估爲TRUE;如果隨機選擇的猜測是*不是殺手。這是你認爲的嗎?如果不是,你希望達到什麼目的? – Marius

+0

我以後希望稍後再說,如果玩家沒有猜出正確的殺手,那麼它會按照以下方式做出打印聲明: print(「*提示,殺手不是」+提示+「。) 現在,這個暗示顯然不可能是真正的殺手,我不希望它成爲先前的猜測。我有什麼辦法可以讓程序從除了真正的殺手之外的所有其他選擇中隨機選擇,以及之前的猜測。 – GafRiedS

+0

哦,我還看到你還在問什麼。在開始時,我允許玩家自定義可能的殺手的名字,這是通過f輸入的。然後從那以前我隨機選擇了真正的殺手(我沒有在這裏展示所有的代碼,以保持較短的代碼) – GafRiedS

回答

1

您可以使用一組和減去你不想要的,例如

hint = random.choice(list({a, b, c, d, e, f} - {killer, previous_guess})) 
+0

謝謝!這正是我的想法,我知道必須有一個簡單的方法來做到這一點,但我一直在思維空虛。 – GafRiedS

0

這是一個基本的方法,你可以做到這一點。這使用了所謂的list comprehension的概念,以便以有效的方式生成列表。 .format()表示字符串格式,它允許您以各種格式將變量傳遞到字符串中(文檔here,但現在只知道{0}引用format()的第一個參數)。

names使用上述列表理解產生的,它是語法上等同於:

names = [] 
for i in range(6): 
    names.append(raw_input('Enter a name: ') 

此模式後使用,而兇手也沒有先前的猜測來生成列表。高興地解釋說,沒有任何意義(感謝@JonClements您指出了一些奇怪我已經在那裏留下)的任何部分:

import random 


# Choose your names 
names = [raw_input('Enter killer name: ') for i in xrange(6)] 

# Choose a killer 
killer = random.choice(names) 

# Run for as many times as you want (here we do 6; could also be len(names) 
max_guesses = 6 

for guessno in xrange(max_guesses): 
    guess = raw_input('Guess the killer: ') 
    # If the guess is not the killer... 
    if guess != killer: 
    # This line creates a list that does not include the killer nor the guess 
    hint = random.choice([n for n in names if n not in [killer, guess]]) 
    print 'Hint, the killer is not {0}'.format(hint) 
    else: 
    print 'Correct! The killer is {0}'.format(guess) 
    break 
+0

這也適用,感謝您的快速回復和良好的建議!它也向我展示了我所做的所有不必要的寫作,這是更加壓縮的。 – GafRiedS

+0

@GafRiedS正確的,它的幫助開心! – RocketDonkey

+0

幾位(因爲SO進入只讀模式,我無法在昨晚發佈):'guesses'永遠不會增加(ergo無限循環錯過了一個正確的猜測),但是你會更好 - 把它寫成'for guess_no in xrange(max_guesses)''無論如何。 'hint'似乎沒有被定義在任何地方......'killer' /'guess'什麼 - 不會是字符串,所以你的list-comp應該是'[n for n in names if if n not in [killer ,猜]]' –