2017-02-03 2 views
-2

私は買う必要がある食料雑貨品の配列と、食料雑貨品目をキーとしたハッシュと、それらの項目の価格を値として持っています。私はハッシュで利用可能なものに基づいて請求書の総費用を教えてくれるプログラムが必要です。また、利用できないアイテムを教えてくれるプログラムが必要です。これを行うにはどうしたらいいですか?これは私がこれまで持っているものです。Perl食料品プログラム

擬似コードで
my %stash = ('tofu' => .30, 'berrys' => .30, 'water' => .30, 'nuts' => .30, 'chips' => .30, 'soda' => .30, 'jam' => .30, 'meat' => .30, 'kale' => .30, 'peas' => .30); 

my @itemsneeded = ('tofu', 'berrys', 'water', 'nuts', 'chips', 'rice', 'vinegar'); 

、私が必要私の項目を通って、それはそれらの項目の費用を合計した項目がない場合にすることは、%stash内のキーと等しい場合、ループにしたいですこれらの名前は別の変数に格納することができます。総コストと利用不可能な項目が印刷されます。私はこれまでこれを行った:

foreach my $items (@itemsneeded) { 
if ($items eq 

と私はそこにいる。どんな助けでも大歓迎です!

+5

こんにちは。 SOはプログラミングを最初から教えるのには適していませんが、むしろ特定の質問に答えるのに適しています。 https://www.perl.org/learn.htmlから始め、Perlを学び、これをコーディングして、特定の質問に戻ってくることをお勧めします。すでにコードがある場合は、それを見てみましょう! – Schwern

+1

@Schwern hi Schwern!あなたの返事に感謝します。私はちょうど私が今まで持っているものを投稿しました。どんな助けもとても素晴らしいでしょう:) – tmoneyz

+0

ハッシュのアイテムの値を取得し、一緒に追加したいとします。あなたのループでは、 '$ stash {$ item}'のような値にアクセスします。 – Joshua

答えて

4

まず初めに、正気にすることから始めます。

use strict; 
use warnings; 
use v5.10; 

これで、strictが有効になりましたが、宣言されていない変数はエラーです。 warningsをオンにするので、Perlは間違いのように見えることを警告します。 5.10 featuresが有効になりますが、最も重要なのはsayです。

データを正しく設定しました。次に、あなたの合計と利用不可能なアイテムを保管する場所が必要です。その後

my $total = 0; 
my @unavailable; 

のものが利用可能とあなたの$totalにその価格を追加しているあなたの@itemsneededチェックをループ。 $item%stashであると定義された値を有するかどうかを

for my $item (@itemsneeded) { 
    if(defined $stash{$item}) { 
     $total += $stash{$item}; 
    } 
    else { 
     push @unavailable, $item; 
    } 
} 

defined $stash{$item}チェックします。そうなった場合は、$totalに価格を追加してください。

push @unavailable, $item;は、@unavailableのリストの最後に項目を追加します。

次に印刷してください。少しの書式設定が必要です。

printf "The total cost is %.2f\n", $total; 

あなたはちょうどあなたが私たちがお金を記述する方法ではありません0.3ような何かを得るでしょう$totalプリントアウトした場合。 %.2fには、小数点以下2桁の数字を書き込むように指定されています。 printfには独自の小さな書式言語がありますので、sprintfのドキュメントですべて読むことができます。それはprintfですが、印刷されず、文字列を返します( "s"は "文字列を返します")。

次に、@unavailableのリストを印刷します。

say "Yes we have no ", join(", ", @unavailable), "."; 

リストの要素をカンマで結合して、正しくフォーマットする必要があります。改行の必要はありません。sayは私たちのためにそれを追加します。

+0

こんにちは@Schwern !!これは本当にありがとうございます。残念ながら、私はコードを実行すると、このエラーが表示されます: "引数" => "main.pl行36に加えて(+)ではありません。行36は、 '$合計+ = $ stash {項目};'どうすれば問題だと思いますか? – tmoneyz

+0

$ stash {$ item}はアイテムのコスト/値にアクセスするのか、アイテム名/キーだけにアクセスするのですか? – tmoneyz

+0

@IwanttoLearnPerlエラーには、何らかの形で '=>' '$ stash {$ item} 'については、' $ stash {$ item}'のような構文強調表示エディタで間違いを見つけられるはずです。 '$ stash {" tofu "}"は '0.30'です。 – Schwern

関連する問題