0

上部の 4 つの変数で指定された値のみが受け入れられ、それ以外のユーザー入力はすべて拒否されるようにしたいのですが、どうすればよいですか? 基本的に、Currency1、Currency2、Currency3、Currency4 のすべてを受け入れるコードが必要です。私のコードの問題は、「いいえ」、「wdgdu」などのすべてが受け入れられていることです。入力を 4 つの変数の下の値に制限するにはどうすればよいですか?

4

4 に答える 4

3

私は使うだろう:

  • アドホックなリストではなく、通貨を検証して正規化するための辞書
  • 再帰ではなく、ユーザーから有効な入力を取得するためのループ
  • .lower()大文字と小文字を正規化する方法

私のリファクタリングされたバージョン:

CURRENCY = {
    '¥': 'JPY', 'yen': 'JPY', 'jpy': 'JPY',
    '€': 'EUR', 'euro': 'EUR', 'eur': 'EUR',
    '$': 'USD', 'dollar': 'USD', 'usd': 'USD',
    '£': 'GBP', 'pound': 'GBP', 'gbp': 'GBP',
}

def read_currency(prompt):
    """Prompt the user to enter a currency.

    Returns a currency code.
    """
    while True:
        x = input(prompt)
        try:
            return CURRENCY[x.lower()]
        except KeyError:
            print('Unknown currency: {!r}'.format(x))

次に、コンバージョン率を好きなように計算できます。

from decimal import Decimal
RATES = { 
    'JPY': Decimal("0.010589"),
    'EUR': Decimal("1.2983"),
    'GBP': Decimal("1.5228"),
    'USD': Decimal("1.0000"),
}
def conversion_rate(cur1, cur2):
    """Get the conversion rate from currency 1 to currency 2."""
    return RATES[cur1] / RATES[cur2]

そして、変換のコードは次のとおりです。

amount = Decimal(input('Enter amount: '))
currency1 = read_currency('Enter source currency: ')
currency2 = read_currency('Enter target currency: ')
rate = conversion_rate(currency1, currency2)
print('{} {} is equal to {} {}'
      .format(currency1, amount, currency2, amount * rate))

適用したい丸めのためのより良いルールがあることに注意してください。

実行例:

金額を入力してください: 1450
元の通貨を入力してください: 円
ターゲット通貨を入力してください: $
1450 円は 15.3700 米ドルに相当します
于 2013-03-24T01:41:20.503 に答える
0

入力でlower()を使用する場合は、「Dollar」と「dollar」の両方を保持する必要はありません。また、正しい入力が入力されない限り存在しないwhileを使用することもできます。quitコマンドを使用して、しばらくの間中断することもできます。

accepted_input = ['yen', 'euro', 'dollar', 'pound', '$']

def get_currency(msg):
    input_valid = False
    while not input_valid:
        user_input = input(msg).lower()
        input_valid = user_input in accepted_input
    return user_input

currency_from = get_currency('Convert from: ')
currency_to = get_currency('Convert to: ')
于 2013-03-24T01:47:42.690 に答える
0
if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound:
    # do stuff

変数名には小文字を使用する必要があります

また、チェックするcurrency.lower()だけで、リスト内の各通貨の小文字バージョンのみが必要になります。

于 2013-03-24T01:20:24.917 に答える
-2

For を使用して、ユーザー入力を確認できます。

CurrencyYen = ['Yen', 'yen', 'YEN']
CurrencyEuro = ['Euro','euro','EURO']
CurrencyDollar = ['Dollar','dollar','DOLLAR','$']
CurrencyPound = ['Pound', 'pound', 'POUND','£']

UserInput = raw_input("Value: ")

for i in range(0,2):
    if (UserInput == CurrencyEuro[i]):
        print "correct input!"
        break
    else:
        print "wrong input"

他のすべてのリストの同じコード。

于 2013-03-24T01:28:15.643 に答える