我有这样的事情:
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循环来做,这是唯一的机会吗? //解决了这个
完成后,我想重复随机提取,直到用户数字像“停止”(这里是我),然后将所有提取的值加起来直到“停止”字符串。我怎么能这样做呢?
全部谢谢!
答案 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
这可以避免创建列表并完成相同的工作:查找所有输入的总和。