• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:python超初心者です(3時間目)。pythonで以下のようなランダ)

python初心者でもランダム数列を生成できる方法

このQ&Aのポイント
  • python超初心者でも、以下のコードを使ってランダムな数列を生成することができます。
  • ただし、コードを組む際にエラーが出る可能性があるため、注意が必要です。
  • また、perlと比べてpythonの学習は難しいかもしれませんが、頑張って学んでいきましょう!

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

Pythonはインデントが重要なのですが、ここでは消されてしまいます。 全角スペースとか適当な文字を使って代用するようにしてください。 さて。 数値は文字列ではありません。 joinは文字列を連結するものですが、数値を自動で文字列化するようなことはしません。 Pythonでは、型付けは結構厳しいです。 ところで、そのPerlの中で %xを使って数値を文字列に変換していますよね。 Pythonでも同じように文字列化すればよいのです。 フォーマット文字列 % 単独の値、またはシーケンス が,Perlの sprintf(フォーマット文字列, 値...) と同等ですので list.append( "%X" % random.randint(0,15)) とすれば、listのは16進の文字列で格納されるので、joinで連結できます #! /usr/bin/python import random # forの範囲などで使うなら、リストを作るrangeより、イテレータを作るxrangeの方が効率的 for i in xrange (20):  list = []  for j in xrange(8):   list.append('%x' % random.randint(0,15)) # 後に使わないのなら、直接書いてもよいでしょう。 # 文字列リテラルも「オブジェクト」なので、下のjoinのような書き方もできます。  print '%02d:%s' % (i, ''.join(list)) ちなみに、2.6以降ではprintの仕様変更がありましたので、そのPerlのスクリプトをPythonではこう書けます。 #! /usr/bin/python from __future__ import print_function #2.6で3仕様のprintを使用するのに必要。3では不要 import random for i in xrange(20): # もとは"%-02s"だけど、これは文字列と数値の違いのないPerlだからできること  print( "%02d:" % i , end='' )  for j in xrange(8):   print( "%x" % random.randint(0,15) , end='') # endの指定がなければ改行付き。表示文字列指定がなければ改行だけ  print( )

tk_1980024
質問者

お礼

お礼遅れましたが本当にどうもありがとうございます。 型定義が厳しい、ということを認識しました。  list.append('%x' % random.randint(0,15)) という使い方、今回学びました。 一冊ざっと読んでみて色々と疑問がでてきています。また宜しくお願いいたします

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

こういうやり方もあるということで。 メソッドの動作などはマニュアルで確認してください。 import random for i in range(20): ____print ''.join([ random.choice("0123456789abcdef") for z in range(8) ]) #行頭の空白を _ に置き換えているので注意 実行するとこうなります↓ ca395f64 7f0a7886 46668b07 9987ca40 d1db01ba d58e89fe 51c4b65e 244f5a9c 64e0bb40 00bd7a5d 040dd325 5f0d6bbd 04919c6a 84497900 303a6cc0 2697a993 e926bdf3 9c8c9b70 b22facce d4362487

tk_1980024
質問者

お礼

お礼遅れましたがどうもありがとうございます。 手元の本(みんなのPython)によると「リスト内包表記」と理解しました。 有難うございます。

回答No.2

そのperlとだいたい同じに書けますよ。 (全角スペースでインデントしてます、注意) ============================================== #! /usr/bin/python import random import sys write = sys.stdout.write for i in xrange (20):  write("%-02d : " % i)  for j in xrange(8):   write("%x" % random.randint(0,15))  print ============================================== %記号を使うことで、書式文字列を簡単に出力できるのが便利です。 rubyも良いと思いますが、pythonを捨てるにはまだ早いです。正規表現は面倒ですが、なかなか良いものですよ。

tk_1980024
質問者

お礼

お礼遅れましたがどうもありがとうございます。 前の方も書かれていた、%記号の型表記の発想が完全に抜けていたようです。 ありがとうございます。 正規表現はまだ攻略できていませんが、考え方を勉強中です。またどうぞ宜しくお願いいたします。

関連するQ&A