您已编辑问题以声明原始版本“已解决”,然后添加了第二个。以后不要那样做;接受为您解决问题的答案,然后创建一个新问题。(而且您仍然应该接受解决原始问题的答案!)但是仅这一次,这是第二个答案:
完成后,我想重复随机提取,直到用户数字类似于“停止”(我在这里),然后将所有提取的值相加,直到“停止”字符串。我该怎么做最后一点?
我假设您使用的是 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
模式正是列表推导和迭代器的用途。而且您可以轻松地将所有用户输入分解到一个生成器函数中,该函数只是yield
s each s[ans]
,然后只是print sum(userChoices())
,而根本不需要建立一个列表。但我会把它留给读者作为练习。