-2

我有这样的事情:

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 循环来做到这一点,这是唯一的机会吗?//解决了这个

完成后,我想重复随机提取,直到用户数字类似于“停止”(我在这里),然后将所有提取的值相加,直到“停止”字符串。我该怎么做最后一点?

谢谢大家!

4

5 回答 5

3
from random import choice
elem = choice (some_list)
于 2013-01-10T22:42:05.470 回答
1

如果您只是尝试选择一个随机数(并且要求输入只是实现该目标的一种手段),那么您真的应该研究random.choice. 它完全符合您的需要,您不必花时间洗牌

于 2013-01-10T22:42:44.150 回答
0

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

完成后,我想重复随机提取,直到用户数字类似于“停止”(我在这里),然后将所有提取的值相加,直到“停止”字符串。我该怎么做最后一点?

我假设您使用的是 Python 2,并使用该input函数,因此用户只需键入即可2获得 number2而不是 string "2"。(如果您使用的是 Python 3,则其input工作方式与 Python 2 类似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模式正是列表推导和迭代器的用途。而且您可以轻松地将所有用户输入分解到一个生成器函数中,该函数只是yields each s[ans],然后只是print sum(userChoices()),而根本不需要建立一个列表。但我会把它留给读者作为练习。

于 2013-01-10T23:46:06.633 回答
0

您可以像这样直接访问数组的值:

s[ans]

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

try:
    i = int(s)
except ValueError:
    i = 0
于 2013-01-10T22:42:08.523 回答
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

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

于 2013-01-11T04:00:46.950 回答