1.のすたる   駄菓子屋さんです
2.3番まで実施しました

3.#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

sum = 0

dagashi = Hash.new(0)
dagashi["ポテトフライ"] = 35
dagashi["蒲焼くん"] = 50
dagashi["おかしカルパス"] = 15
dagashi["ピグメン"] = 115
dagashi["ガジリチュウ"] = 30
dagashi["おおきなカツ"] = 30
dagashi["やんやんつけバー"] = 150
dagashi["レタス次郎"] = 25
dagashi["ミニドーナツ"] = 40
dagashi["うめえ棒"] = 10
dagashi["フーセンガム"] = 35
dagashi["笛ラムネ"] = 80
dagashi["ふ菓子"] = 30
dagashi["チョコマシュマロ"] = 15

for name in dagashi.keys
  printf("%s  ",name)
end
print"\n"

print "なにを買いますか?\n"
while true
  kashi = gets.chomp!
  money = dagashi[kashi]
  if kashi == "q"
    break
  end
  if money == 0
    printf("申し訳ありません。%sはお取り扱いしておりません。\n", kashi)
    redo
  end
  
  printf("1つ%s円です。\n",money)
  
  print"何個買いますか?\n"
  kosu = gets.chomp!.to_i
  sum += money * kosu
  
  
  print"他に買うものはありますか?(終了の場合はq)\n"
  
end
printf("お会計は%s円になります。\n",sum)

4.ED-SA102-046{xxxxxxx}% ./ruby2-2.rb                             [~/program]
ポテトフライ  蒲焼くん  おかしカルパス  ピグメン  ガジリチュウ  おおきなカツ  やんやんつけバー  レタス次郎  ミニドーナツ  うめえ棒  フーセンガム  笛ラムネ  ふ菓子  チョコマシュマロ
なにを買いますか?
お菓子カルパス
申し訳ありません。お菓子カルパスはお取り扱いしておりません。
なにを買いますか?
おかしカルパス
1つ15円です。
何個買いますか?
4
他に買うものはありますか?(終了の場合はq)
蒲焼くん
1つ50円です。
何個買いますか?
2
他に買うものはありますか?(終了の場合はq)
うめえ棒
1つ10円です。
何個買いますか?
9
他に買うものはありますか?(終了の場合はq)
q
お会計は250円になります。

5.
4行目のsumは合計金額を代入する変数です。
6~20行目でdagashi = Hash.new(0)で駄菓子の名前と金額を設定しています。ないものは0と認識してほしいので(0)のままにしています。
22~25行目でfor-endでdagashiのkey一覧を表示しています。
27行目では、はじめの文言だけ「なにを買いますか?」にしたかったので、28行目からwhile-endの繰り返しをしています。
29・30行目でkashi(お菓子の名前)に入力したものに対応する金額(money)を取り出します。
31~33行目でkashiに入力したものがqだった場合、繰り返しから抜けます。
34~37行目では、一癖あるお菓子の名前にしたので、一覧にないものを入力した場合、ないですよと言ってもう一度入力できるようにredoを使いました。qを入力した場合、上のif文より先にこちらのif文を書いてしまうと、qと認識される前に0と認識されてしまうようだったので、このif文をあとに書きました。
41~43行目で何個買うか(kosu)を入力し、個数と金額をかけて(money * kosu)、sumに足していきます。
45行目で文言を変え、買うものを尋ねています。この位置に置くとはじめと違った聞き方ができました。
47行目でwhileから抜けます。(end)
48行目で合計金額を表示します。

6.お菓子の名前はさておき、プログラム自体は結構すっきりしたものができたかなと思います。whileの最後にもう一度買うものを尋ねる文言を置くところとかうまくいったなと思います。いろいろなメソッドが使えるようになってきたなと感じます。
添付:
ruby2-2.rb