4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1行でじゃんけんゲームをつくる(python)

Last updated at Posted at 2020-06-15

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みたいに使う気がします。

最後に

なんかわからないことがあったりもっと短く書けるよってあったりもっとわかりやすく書けるよとかあったら気軽にコメントください:smile:

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?