質問を編集して、元のバージョンを「解決済み」と宣言してから、2 つ目のバージョンを追加しました。将来的には、そうしないでください。問題を解決した回答を受け入れてから、新しい質問を作成してください。(そして、元の問題を解決した回答を引き続き受け入れる必要があります!) しかし、今回のみ、2 つ目の回答を次に示します。
それが終わったら、ユーザーが「停止」のような数字を入力するまでランダム抽出を繰り返し(ここでは私はそうです)、「停止」文字列まで抽出されたすべての値を合計します。この最後のポイントはどうすればよいですか?
Python 2 を使用していて、このinput
関数を使用していると想定しているため、ユーザーは入力するだけで string の代わりに2
数値を取得できます。(Python 3 を使用している場合は、Python 2 のように動作するため、2 番目のバージョンを参照してください。)2
"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
each s[ans]
、次に だけのジェネレーター関数に簡単に分解できます。print sum(userChoices())
しかし、それは読者の演習として残しておきます。