<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          編程到底難在哪里?

          共 3365字,需瀏覽 7分鐘

           ·

          2021-02-20 14:10

          作者:DJ Hitori
          鏈接:https://www.zhihu.com/question/22508677/answer/141334678
          來源:知乎
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

          今天知乎上看到這個回答,挺有意思,分享給大家。


          普通人:
          我今天要買一斤蘋果。

          程序員:
          我今天要買一斤蘋果。
          因為我只喜歡紅富士蘋果,所以我只買紅富士蘋果。
          我能接受的最高價格是10元/斤。

          正常情況下一斤蘋果用一個袋子能裝下,但是為防萬一,我會帶兩個袋子。
          我知道附近的3家水果店,所以我會依次訪問這3家水果店。
          根據(jù)上述條件,我設(shè)計出以下的買蘋果的流程:
          買蘋果流程開始    對水果店0、水果店1、水果店2依次執(zhí)行:    拜訪一家水果店流程開始        走到此水果店        如果此水果店沒有開門,則結(jié)束當(dāng)前的“拜訪一家水果店流程”        如果此水果店沒有蘋果,則結(jié)束當(dāng)前的“拜訪一家水果店流程”        如果此水果店的蘋果當(dāng)中沒有紅富士蘋果,則結(jié)束當(dāng)前的“拜訪一家水果店流程”        如果此水果店的紅富士蘋果剩余不到一斤,則結(jié)束當(dāng)前的“拜訪一家水果店流程”        如果此水果店的紅富士蘋果的價格高于10元/斤,則執(zhí)行3次:        講價流程開始            詢問店主是否愿意將價格降到10元/斤或更低            如果店主愿意,則跳過剩余的“講價流程”        講價流程結(jié)束        如果此水果店的紅富士蘋果的價格仍然高于10元/斤,則結(jié)束當(dāng)前的“拜訪一家水果店流程”        打開一個袋子,將其作為當(dāng)前的袋子        重復(fù)執(zhí)行以下流程,直到總重量大于一斤:        裝袋一個蘋果流程開始            從所有的不在袋子中的紅富士蘋果中選出最好的一個            如果此蘋果能裝入當(dāng)前的袋子,則將此蘋果裝入當(dāng)前的袋子,否則執(zhí)行:            換袋子流程開始                如果我有剩余的袋子,則從中任意選出一個并作為當(dāng)前的袋子,否則執(zhí)行:                向店主要袋子流程開始                    向店主索要一個袋子                    如果店主拒絕給我袋子,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“拜訪一家水果店流程”                    將店主給我的袋子作為當(dāng)前的袋子                向店主要袋子流程結(jié)束            換袋子流程結(jié)束            測量我的所有袋子里的所有蘋果的總重量        裝袋一個蘋果流程結(jié)束        根據(jù)我的所有袋子里的所有蘋果的總重量和店主給出的價格,計算我應(yīng)付的價格        向店主詢問我應(yīng)付的價格        如果我不接受店主索要的價格,則執(zhí)行3次:        校對流程開始            向店主解釋我計算出的價格,并詢問其是否同意            如果店主同意,則跳過剩余的“校對流程”        校對流程結(jié)束        如果我仍然不接受店主索要的價格,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“拜訪一家水果店流程”        如果我沒帶錢,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“拜訪一家水果店流程”        付錢拿走蘋果        跳過剩余的“拜訪一家水果店流程”    拜訪一家水果店流程結(jié)束買蘋果流程結(jié)束

          這個流程怎么樣?我來設(shè)計一些測試樣例,測試一下這個流程。

          測試發(fā)現(xiàn)一個問題:如果水果店0和水果店1都有紅富士蘋果并且價格都低于10元/斤,而且水果店1的價格比水果店0更低,那么我希望買水果店1的蘋果,但我設(shè)計的流程會讓我買水果店0的蘋果。

          為了解決這個問題,我應(yīng)該先詢問所有水果店的價格,然后去價格最低的那一家買蘋果。

          經(jīng)過修改,我重新設(shè)計出以下的買蘋果的流程:

          買蘋果流程開始    對水果店0、水果店1、水果店2依次執(zhí)行:    詢問一家水果店的紅富士價格流程開始        走到此水果店        如果此水果店沒有開門,則視此水果店的紅富士價格為無窮大元/斤,并結(jié)束當(dāng)前的“詢問一家水果店的紅富士價格流程”        如果此水果店沒有蘋果,則視此水果店的紅富士價格為無窮大元/斤,并結(jié)束當(dāng)前的“詢問一家水果店的紅富士價格流程”        如果此水果店的蘋果當(dāng)中沒有紅富士蘋果,則視此水果店的紅富士價格為無窮大元/斤,并結(jié)束當(dāng)前的“詢問一家水果店的紅富士價格流程”        如果此水果店的紅富士蘋果剩余不到一斤,則視此水果店的紅富士價格為無窮大元/斤,并結(jié)束當(dāng)前的“詢問一家水果店的紅富士價格流程”        向店主詢問此水果店的紅富士蘋果價格并記錄    詢問一家水果店的紅富士價格流程結(jié)束    從3家水果店中選出紅富士價格最低的一家(如果有并列則隨機選擇),將其作為目標(biāo)水果店    如果目標(biāo)水果店的紅富士蘋果價格為無窮大元/斤,則結(jié)束當(dāng)前的“買蘋果流程”    走到目標(biāo)水果店    如果此水果店的紅富士蘋果的價格高于10元/斤,則執(zhí)行3次:    講價流程開始        詢問店主是否愿意將價格降到10元/斤或更低        如果店主愿意,則跳過剩余的“講價流程”    講價流程結(jié)束    如果此水果店的紅富士蘋果的價格仍然高于10元/斤,則結(jié)束當(dāng)前的“買蘋果流程”    打開一個袋子,將其作為當(dāng)前的袋子    重復(fù)執(zhí)行以下流程,直到總重量大于一斤:    裝袋一個蘋果流程開始        從所有的不在袋子中的紅富士蘋果中選出最好的一個        如果此蘋果能裝入當(dāng)前的袋子,則將此蘋果裝入當(dāng)前的袋子,否則執(zhí)行:        換袋子流程開始            如果我有剩余的袋子,則從中任意選出一個并作為當(dāng)前的袋子,否則執(zhí)行:            向店主要袋子流程開始                向店主索要一個袋子                如果店主拒絕給我袋子,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“買蘋果流程”                將店主給我的袋子作為當(dāng)前的袋子            向店主要袋子流程結(jié)束        換袋子流程結(jié)束        測量我的所有袋子里的所有蘋果的總重量    裝袋一個蘋果流程結(jié)束    根據(jù)我的所有袋子里的所有蘋果的總重量和店主給出的價格,計算我應(yīng)付的價格    向店主詢問我應(yīng)付的價格    如果我不接受店主索要的價格,則執(zhí)行3次:    校對流程開始        向店主解釋我計算出的價格,并詢問其是否同意        如果店主同意,則跳過剩余的“校對流程”    校對流程結(jié)束    如果我仍然不接受店主索要的價格,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“買蘋果流程”    如果我沒帶錢,則將我的所有袋子里的所有蘋果取出,然后結(jié)束當(dāng)前的“買蘋果流程”    付錢拿走蘋果買蘋果流程結(jié)束

          現(xiàn)在這個流程是不是完美了呢?不是,我還能發(fā)現(xiàn)很多問題。

          如果3家水果店都有紅富士蘋果但都不到一斤,但是三家店加起來能達(dá)到一斤,那么我不應(yīng)該結(jié)束流程回家,而是應(yīng)該把三家店的紅富士蘋果都買下來。

          如果我向水果店詢問價格的時候這家店還有紅富士蘋果,但我詢問完所有水果店的價格后這家店的紅富士蘋果賣完了,那么我的流程會讓我試圖處理不存在的紅富士蘋果。

          我走路的過程中可能會遇到突發(fā)事件,比如發(fā)現(xiàn)了新的水果店,比如袋子破掉了蘋果掉一地,對于這些情況我的流程都無法進(jìn)行處理。

          啊問題太多了我懶得再改流程了。我還是去X寶買吧。

          那么接下來我要設(shè)計一個在X寶買紅富士蘋果的流程……

          瀏覽 26
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚州无码 | 伊人久久青青 | 一级α片免费看刺激高潮视频 | 精品一区二区久久久久久久网站 | 青青草青青操 |