あなたのコードには、発生している結果の原因となる小さな問題があります。
使用する場合:
name1 = File.readlines('first.txt').sample(1)
戻り値は文字列ではなく、1 つのランダム サンプルを含む配列です。すなわち:
["Jhon"]
["Jhon"]これが、を使用したときに出力が得られる理由ですprint。
文字列を期待する(そして好む)ので、代わりにこれを試してください:
name1 = File.readlines('first.txt').sample(1)[0]
name2 = File.readlines('middle.txt').sample(1)[0]
name3 = File.readlines('last.txt').sample(1)[0]
また:
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
または、おそらくあなたが意味したことは、引数なしsampleで、配列の代わりにオブジェクトを返します:
name1 = File.readlines('first.txt').sample
name2 = File.readlines('middle.txt').sample
name3 = File.readlines('last.txt').sample
また、印刷中に、必要なすべてのスペースとフォーマットを含む 1 つの文字列を作成した方がよいでしょう。すなわち:
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
puts "#{name1} #{name2} #{name3}."
# or
print "#{name1} #{name2} #{name3}."