python3.8+ onlyです
コード
print("a|b|c"*-~-((a:=input("a:パー\nb:チョキ\nc:グー\n"))in"abc")or"Draw"*((b:=__import__("random").choice("abc"))==a)or"You "+"lwoisne"[b+a in"abbcca"::2],f"\nyou:{a} pc:{b}")
185Byteです
解説
最初に言っとくと多分もっと短くできると思います...
まあわかりやすくすると
import random
a = input("a:パー\nb:チョキ\nc:グー")
b = random.choice("abc")
if -~-(a in "abc"):
print("a|b|c")
elif a == b:
print("Draw")
else:
print("win" if b+a in "abbcca" else "lose")
print(f"you:{a} pc:{b}")
こんな感じでしょうか。ちょびっと変えたりしてますが。
多分一番謎なのが-~-
ですね。これは~-で-1(-~は+に当たる)してそれをさらに-してるってことですね。a in "abc"
がTrueの場合(boolはintのsubclassなので)-1されて-になるので-0,つまり0になり、Falseの場合1になる。要するにnot 〇〇を短く書いてるってことです。(下の場合だと逆に長くなるけど上だと短くなる)
で、次にb+a in "abbcca"
でしょうか。これはまあ勝ち負けの判定ですね。ab/bc/caとでも区切ればわかりやすいかもしれません。
__import__
はまあ引数で指定したモジュールをimportしてそのオブジェクトを返す関数です。(あってるよね?)まあ詳細はここでも見てください。
あとは~~~*~~~or~~~*~~~or...
みたいなやつでしょうか。これはpythonでは空文字列がFalseになることを利用したものですね。ふつうはstr*bool
みたいに使う気がします。
最後に
なんかわからないことがあったりもっと短く書けるよってあったりもっとわかりやすく書けるよとかあったら気軽にコメントください