2

入力がdまたはDでない限り「e」を返すメニューがあります。別の変数を作成せずに1行で実行したいと思います

encrypt = 'd' if (raw_input("Encrypt or Decrypt a file(E/d):") == ('d' or 'D')) else 'e'

[編集] OK、これは難しいものです

どうすればこれと同じことができますか

file_text = 'a.txt' if (raw_input("File name(a.txt):")=='a.txt' else [What I typed in]
4

2 に答える 2

3

in次の演算子を使用します。

encrypt = 'd' if raw_input("Encrypt or decrypt a file (E/d):") in ('d', 'D') else 'e'

または、入力を小文字に変換して「d」と比較することもできます。

encrypt = 'd' if raw_input("Encrypt or decrypt a file (E/d):").lower() == 'd' else 'e'

最後に、ユーザーが確実に e または d を入力するようにしたい場合は、while ループでラップできます。

while True:
    encrypt = raw_input("Encrypt or decrypt a file (E/d):")

    # Convert to lowercase
    encrypt = encrypt.lower()

    # If it's e or d then break out of the loop
    if encrypt in ('e', 'd'):
        break

    # Otherwise, it'll loop back and ask them to input again

編集:2番目の質問に答えるには、ラムダを使用できますか?

file_text = (lambda default, inp: default if inp.lower() == default else inp)("a.txt", raw_input("File name(a.txt):"))

とはいえ、これは明らかに少し鈍感で、半分「賢すぎる」です。

于 2012-04-03T19:47:40.693 に答える
1

真剣な意味ではありませんが、別の1行のソリューションです(読みにくいと思います):

encrypt = {'d':'d','D':'d'}.get(raw_input("Encrypt or decrypt a file (E/d):"), 'e')

少なくとも短いです。同様の状況で辞書が実際に役立つ場合があります (選択肢が他にある場合)。

于 2012-04-03T19:59:40.187 に答える