일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- springboot
- Spring
- 인프런
- Web
- メソッド
- CSS
- 연습문제
- 単語
- Python
- 비즈니스일본어
- 日本語
- 반다이몰
- C로 시작하는 컴퓨터 프로그래밍4판
- 一日一つメソッド
- Flutter
- 건담베이스
- javascript
- rails7
- html
- DART
- nico
- 자바
- rails
- 건담
- 디지몬
- vscode
- jsp
- ruby
- 일본어
- java
- Today
- Total
AR삽질러
Ruby ロト自動生成プロクラム 본문
Ruby ロト自動生成プロクラム
使用者がLottoの金額を入力しその金額のLotto番号を自動生成する。
生成された自分のLotto番号とパソコンのLotto番号が合っているかチェックする。
例題
1. Lottoクラス
- Lottoクラスは1から45までの数字の中からランダムに6つの数字を選択する必要。 これらの数字は整列で、重複があってはなりません。
2. ユーザクラス機能
- ユーザが入力できる金額は、最低100円から最大20,000円の間でなければならない。 入力された金額に応じて購入できるロトの数を計算し、その数だけロト番号を生成する。
3. 当選番号生成
- ComLottoクラスは当せん番号を生成する役割で、 このクラスは、1 から 45 までの数字の中からランダムに 6 つの数字を選択する。
4. 当選確認
- Confirmationクラスは、ユーザーのロト番号と当せん番号を比較し、一致する数字の個数によって異なるメッセージを出力する。(例:6つ一致 - "1位!")! 20億」、5つ一致。 - 「2位!2000万円」)。
5. ユーザーインターフェイス
- プログラムは、ユーザーに明確なガイダンス メッセージを提供する必要があり、入力エラーに対する適切な処理をする。
6. プログラムの流れ
- プログラムは、ユーザーが終了を選択するまで繰り返す。
class Lotto
attr_accessor :lotto_numbers
def lotto_create_number
@lotto_numbers = (1..45).to_a.sample(6).sort
end
end
class User
attr_accessor :money, :user_lotto_numbers
def initialize
@money = 0
@user_lotto_numbers = []
end
def user_greet
puts "---lotto店へようこそ ---"
puts "---1. lotto購買 ---"
puts "---2. 終了 ---"
print "入力 1 or 2 : "
select_user = gets.chomp.to_i
if select_user == 1
user_by_lotto
elsif select_user == 2
puts "lottoプロクラムを終了します.."
else
puts "間違った入力です.."
end
end
def user_by_lotto
print "\n購買するLotto金額を入力してください : "
input_money = gets.chomp.to_i
if input_money.between?(100, 20000)
@money = input_money
lotto_price = 100
@lotto_count = @money / lotto_price
puts "#{@money}円で #{@lotto_count}回を購入しました。\n"
user_lotto_confirmation
elsif input_money == 3
puts "lottoプロクラムを終了します.."
else
puts "100円以上、 20000円以下で購入してください!"
end
end
def user_lotto_confirmation
com_lotto = ComLotto.new()
confirmation = Confirmation.new(self, com_lotto)
while true
puts "\n---お買い上げのロト#{@lotto_count}回---"
puts "---1. 自分のロトの番号を確認 ---"
puts "---2. 当せん 確認 ---"
puts "---3. プロクラムを終了 ---"
print "入力 1, 2, 3 : "
choice = gets.chomp.to_i
puts "\n"
case choice
when 1
@lotto_count.times do |i|
lotto = Lotto.new()
lotto.lotto_create_number
@user_lotto_numbers << lotto.lotto_numbers
puts "#{i+1}番のロト : #{lotto.lotto_numbers}"
end
when 2
com_lotto.com_lotto
confirmation.check_winnig
when 3
puts "--プロクラムを終了します--"
break
else
puts "間違った入力です。 もう一度試してください.."
end
end
end
end
class LottoMachine
end
class ComLotto
attr_accessor :com_lotto_numbers
def initialize
@com_lotto_numbers = (1..45).to_a.sample(6).sort
end
def com_lotto
puts "\n--今週の当せん番号--"
puts "#{@com_lotto_numbers}"
end
end
class Confirmation
def initialize(user, com_lotto)
@user = user
@com_lotto = com_lotto
end
def check_winnig
winning_numbers = @com_lotto.com_lotto_numbers
@user.user_lotto_numbers.each_with_index do |lotto_numbers, index|
matched_number = lotto_numbers & winning_numbers
case matched_number.size
when 6
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 1位! 20億円"
when 5
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 2位! 5000千万円"
when 4
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 3位! 2000千万円"
when 3
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 4位! 5000万円"
when 2
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 5位! 500円"
else
puts "#{index + 1}番のLotto番号 #{lotto_numbers} : すみません..ㅠㅠ"
end
end
end
end
user = User.new()
user.user_greet
1. Lottoクラス
- このクラスはロト番号を生成し、 lotto_create_numberメソッドを介して1から45までの数字の中からランダムに6つの数字を選択し、これを昇順に並べ替えます。
- attr_accessor : lotto_numbersはlotto_numbersインスタンス変数に対するgetterとsetterメソッドを提供する。
2. Userクラス
- ユーザーとの相互作用を管理し、 ユーザーからロト購入の金額を入力してもらい、購入したロト番号を保存する。
- user_greetメソッドは、ユーザーに挨拶を出力し、ロト購入またはプログラム終了を選択する。
- user_by_lottoメソッドは、ユーザーが入力した金額に応じてロトを購入し、 購入可能なロトの数は入力金額によって決まる。
- user_lotto_confirmationメソッドは、ユーザーが購入したロト番号を確認し、当せんしたかどうかを検査したり、プログラムを終了できるオプションを提供する。
3. ComLottoクラス
- コンピュータが生成した当せんロット番号を管理し、initializeメソッドでランダムに6つの当選番号を生成し、整列して保存する。また、com_lottoメソッドは、生成された当せん番号を出力する。
4. Confirmationクラス
- ユーザーのロト番号と当選番号を比較して当せん可否を確認します。
- initializeメソッドでは、ユーザクラスとComLottoクラスのインスタンスを受け取り、これらのインスタンスに保存された情報にアクセスする。
- check_winningメソッドは、ユーザーの各ロット番号と当選番号を比較し、一致する数字の数に応じて当選順位と賞金を出力する。
5. プログラムを実行
- プログラムの実行は、User クラスのインスタンスを作成し、user_greetメソッドを呼び出すことで開始する。 これにより、ユーザーはロトを購入し、当選したかどうかを確認することができる。
ソースコード
https://github.com/designAR/ruby_lotto?tab=readme-ov-file
'Ruby > Ruby-日本語' 카테고리의 다른 글
Ruby メソッドの公開範囲 (0) | 2023.12.19 |
---|---|
Ruby 例外と例外処理、コーディングルール (0) | 2023.12.19 |
Ruby モジュール (0) | 2023.12.19 |
Ruby 例題 - 継承とユーザー入力を活用した動物園 (0) | 2023.12.19 |
Ruby クラスと定数(Constant)、クラスの継承 (0) | 2023.12.19 |