-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

次のように、配列の値に直接アクセスできます。

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 に答える
0

質問を編集して、元のバージョンを「解決済み」と宣言してから、2 つ目のバージョンを追加しました。将来的には、そうしないでください。問題を解決した回答を受け入れてから、新しい質問を作成してください。(そして、元の問題を解決した回答を引き続き受け入れる必要があります!) しかし、今回のみ、2 つ目の回答を次に示します。

それが終わったら、ユーザーが「停止」のような数字を入力するまでランダム抽出を繰り返し(ここでは私はそうです)、「停止」文字列まで抽出されたすべての値を合計します。この最後のポイントはどうすればよいですか?

Python 2 を使用していて、このinput関数を使用していると想定しているため、ユーザーは入力するだけで string の代わりに2数値を取得できます。(Python 3 を使用している場合は、Python 2 のように動作するため、2 番目のバージョンを参照してください。)2"2"inputraw_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パターンがまさにリスト内包表記と反復子の目的であることに気付くかもしれません。また、すべてのユーザー入力を、リストをまったく作成しなくても、単にyieldeach s[ans]、次に だけのジェネレーター関数に簡単に分解できます。print sum(userChoices())しかし、それは読者の演習として残しておきます。

于 2013-01-10T23:46:06.633 に答える