从混洗列表中提取元素(基于用户的输入)

时间:2013-01-10 22:38:35

标签: python random

我有这样的事情:

s=[7777,5454,75000,4545,787,16000,1000,9888,7854,12223]
random.shuffle(s)
ans=input('Press a number from 0 to 9')

我想将输入数字ans与s [ans]元素相关联。我可以用10 if循环来做,这是唯一的机会吗? //解决了这个

完成后,我想重复随机提取,直到用户数字像“停止”(这里是我),然后将所有提取的值加起来直到“停止”字符串。我怎么能这样做呢?

全部谢谢!

5 个答案:

答案 0 :(得分:3)

from random import choice
elem = choice (some_list)

答案 1 :(得分:1)

如果你只是想选择一个随机数(并且要求输入只是实现该目标的一种方法),那么你应该真正研究random.choice。它完全符合您的需求,并且您不必花费时间来改变您的列表

答案 2 :(得分:0)

您可以直接访问数组的值,如下所示:

s[ans]

但首先你可能必须将ans转换为整数(并处理用户发送的不是数字的情况!)

try:
    i = int(s)
except ValueError:
    i = 0

答案 3 :(得分:0)

您已编辑了问题以声明原始版本“已解决”,然后添加了第二个问题。将来,不要这样做;接受为您解决问题的答案,然后创建一个新问题。 (你仍然应该接受解决你原来问题的答案!)但这次只是,这是第二个答案:

  

完成后,我想重复随机提取,直到用户数字像“停止”(这里是我),然后将所有提取的值加起来直到“停止”字符串。我怎么能这样做呢?

我假设您使用的是Python 2,并使用input函数,因此用户只需键入2即可获得数字2而不是字符串{{ 1}}。 (如果你使用的是Python 3,"2"就像Python 2的input一样,所以请看第二个版本。)

所以:

raw_input

请注意,用户必须使用引号以这种方式键入s=[7777,5454,75000,4545,787,16000,1000,9888,7854,12223] random.shuffle(s) values = [] while True: ans=input('Press a number from 0 to 9') if ans == 'stop': break values.append(s[ans]) print sum(values) 。如果用户改为键入"stop"(或stop,则该程序将退出并发生异常。最好使用10代替,并执行以下操作:

raw_input

您可能会发现这个s=[7777,5454,75000,4545,787,16000,1000,9888,7854,12223] random.shuffle(s) values = [] while True: ans=raw_input('Press a number from 0 to 9, or stop when done') if ans == 'stop': break try: index = int(ans) values.append(s[ans]) except ValueError: print '{} is not a number or the word stop'.format(ans) except IndexError: print '{} is not between 0 and 9.'.format(ans) print sum(values) values = []while模式正是列表推导和迭代器的用途。并且您可以轻松地将所有用户输入分解为仅values.append每个yield的生成器函数,然后只需s[ans],而无需构建列表。但我会将其作为读者的练习。

答案 4 :(得分:0)

ans = 0
s = [7777,5454,75000,4545,787,16000,1000,9888,7854,12223]
ans_sums = []
while ans != 'stop': # while the input is not 'stop'
    random.shuffle(s)
    ans = raw_input('Press a number from 0 to 9: ') # this returns the input as a string
    if ans == 'stop':
        break
    else:
        ans_sums.append(int(s[ans])) # adds s[ans] to ans_sums.
        # it must be converted to an integer first because raw_input returns it as a string
return sum(s[ans])

或者,您可以执行以下操作:

ans = 0
s = [7777,5454,75000,4545,787,16000,1000,9888,7854,12223]
ans_sums = 0
while ans != 'stop': # while the input is not 'stop'
    random.shuffle(s)
    ans = input('Press a number from 0 to 9: ')
    if ans == 'stop':
        break
    else:
        ans_sums += s[ans] # adds s[ans] to ans_sums
return ans_sums

这可以避免创建列表并完成相同的工作:查找所有输入的总和。