2015-04-22 92 views
0

基本上我想要我的代码要做的是打印出5 wrong() func's,而不是在同一文本中有2个。当然,我不希望它是运气。 :)Python |避免从列表中随机选择以前的值

虽然不担心它的部分打印出来5 wrong() s,我只是想确定一下,如果我至少使用这个函数两次,我100%确定以前的值不会相同作为下一个。

例如,我想避免:

Wrong! 
Wrong! 

虽然这仍然是罚款:

Wrong! 
Incorrect! 
Wrong! 

我的代码:

import random 

def wrong(): 
    wrong_stats=["\n Wrong!","\n Tough Luck!","\n Better Luck Next Time!","\n Not there yet!","\n Incorrect!"] 
    rand = random.choice(wrong_stats) 
    rand3 = random.choice(wrong_stats) 
    norep(rand,rand3,wrong_stats) 

def norep(rand,rand3,wrong_stats): 
    if rand == rand3: 
     same = True 
     while same: 
      rand = random.choice(wrong_stats) 
      if rand != rand3: 
       print(rand) 
       break 

    elif rand != rand3: 
     print(rand) 

wrong() 
wrong() 
wrong() 
wrong() 
wrong() 
+0

您选择要打印的内容,然后当您再次调用'wrong()'时,您会忘记刚刚选择的内容,并且永远不会检查您的新选择与以前的不同。 –

回答

1

您需要跟踪它返回的最后一个值;你可以

  • 使用全球模块为这个(实际上通常杂乱)
  • 或把它变成一个类(种详细)
  • 或跟踪外部,并将其传递在每次(笨重,繁琐)

但国际海事组织做这将是把你的wrong功能到0123的最好方式改为::这样您就可以跟踪生成器执行状态中的最后一个返回值,并且可以避免它下一次出现,而无需担心在任何地方使用外部代码。

def wrong(): 
    wrong_stats = ["Wrong!","Tough Luck!","Better Luck Next Time!","Not there yet!","Incorrect!"] 
    previous_value = None 
    while True: 
     value = random.choice(wrong_stats) 
     if value != previous_value: 
      yield value 
      previous_value = value 

与用法:

w = wrong() 
for i in range(5): 
    print(next(w)) 

# Tough Luck! 
# Incorrect! 
# Not there yet! 
# Tough Luck! 
# Better Luck Next Time! 

你可以保持通话next与发电机,它会产生一个字符串无限数量而不用重复以前的值。

0

商店以前的值在全球变量,并从列表中随机选择(不包括以前的值):

import random 

wrong_stats=["\n Wrong!","\n Tough Luck!","\n Better Luck Next Time!","\n Not there yet!","\n Incorrect!"] 
prev = "" 

def wrong(): 
    global prev 
    if prev == "": 
    prev = random.choice(wrong_stats) 
    else: 
    prev = random.choice(wrong_stats[:wrong_stats.index(prev)] + wrong_stats[wrong_stats.index(prev)+1:]) 
    print prev 
if __name__ == "__main__": 
    wrong() 
    wrong() 
    wrong() 
    wrong() 
    wrong() 
1

全局变量是一个不好的做法。

您应该将最后打印的值传递给wrong,然后在除该值之外的所有值之间进行选择。就像这样:

import random 

def wrong(last): 
    chosen = random.choice([stat for stat in WRONG_STATS if stat != last]) 
    print(chosen) 
    return chosen 

if "__main__" == __name__: 
    last = None 
    for i in xrange(5): 
     last = wrong(last) 
0

使用random.shuffle:

from random import shuffle 
>>> shuffle(wrong_stats) 
>>> wrong_stats 
['\n Better Luck Next Time!', '\n Wrong!', '\n Incorrect!', '\n Tough Luck!', '\n Not there yet!'] 
>>> shuffle(wrong_stats) 
>>> wrong_stats 
['\n Incorrect!', '\n Tough Luck!', '\n Better Luck Next Time!', '\n Not there yet!', '\n Wrong!'] 
>>> shuffle(wrong_stats) 
>>> wrong_stats 
['\n Incorrect!', '\n Wrong!', '\n Better Luck Next Time!', '\n Not there yet!', '\n Tough Luck!'] 
>>> shuffle(wrong_stats) 
>>> wrong_stats 
['\n Wrong!', '\n Incorrect!', '\n Better Luck Next Time!', '\n Tough Luck!', '\n Not there yet!'] 
0

这里是一个可能给你一个想法另一个例子:

import random 

country = ["Spain", "Sweden", "Netherlands", "Germany"] 
lastcountry = '' 
i = 0 
while i <= 5: 
    country = (random.choice(country)) 
    if (country != lastcountry): 
     i = i + 1 
     print (country) 
    lastcountry = country 

它会记住这是挑选的最后一个选项。
如果它做出了新的选择,它看起来是否与previeus选择不一样。