-6

私がいるところ

入手したすべてのボトルをリサイクルした後、10 RMB で何本のビールを購入できるかを計算しようとしています。手続き的に何か間違ったことをしていることは明らかですが、それが何であるかはわかりません。私は現在、第 9 章の「コンピューター科学者のように考える方法: Python を考える」を読んでいます。これは私にとって簡単なプログラムだと思いますが、アプリのリサイクル部分でループする方法がわかりません。ビールの購入をすすいで繰り返す最も簡潔な方法は何ですか?

質問

基本的にビール1杯2元。ビン2個で1人民元。4 キャップで 1 RMB を取得します。私は10元から始めています。ビールは何本買えますか (ビンとキャップはすべてリサイクルします)?

#5 bottles 5 caps 
#= 3 rmb + 1 caps 1 bottles
#6th bottle bought 
#= 2rmb + 2 caps
#7th bottle bought 
#= 0rmb + 3 caps 1 bottles.

import math

def countbeers(rmb):
    beers = 0;
    caps = 0;
    bins = 0;
    bcost = 2;

    for i in range (0,rmb):
        beers += 1/2

    for i in range (0,math.floor(beers)):
        caps += 1
        bins += 1
        rmb = rmb - bcost

    for i in range (0,caps):
        rmb += 1/4

    for i in range (0,bins):
        rmb += 1/2

    #  if rmb > 2  what goes here, trying to loop back through

    return beers

print(countbeers(10))

2 回目の試行

#5 bottles 5 caps 
#= 3 wallet + 1 caps 1 bottles
#6th bottle bought 
#= 2wallet + 2 caps
#7th bottle bought 
#= 0wallet + 3 caps 1 bottles.

import math

global beers
global caps
global bins
global bcost

beers = 0
caps = 0
bins = 0
bcost = 2

def buybeers(wallet):
    beers = 0
    for i in range (0,wallet):
        beers += 1/2
        wallet -= 2
    return beers

def drinkbeers(beers):
    for i in range (0,math.floor(beers)):
        caps += 1
        bins += 1
        wallet = wallet - bcost
    return wallet, caps, bins

def recycle(caps, bins):
    for i in range (0,caps):
        wallet += 1/4

    for i in range (0,bins):
        wallet += 1/2

    return wallet

def maxbeers(wallet):
    if wallet > 2:
        buybeers(wallet)

    if math.floor(beers) > 1:
        drinkbeers(beers)

    if caps > 4 | bins > 2:
        recycle(caps, bins)
        return wallet

wallet = int(input("How many wallet do you have?"))

maxbeers(wallet)
if wallet >= 2:
    maxbeers(wallet)
elif wallet < 2: 
    print(beers)
4

1 に答える 1

1

あなたの主な問題は、ループしていないことです。購入したビールごとrmbに、もう 1 本のボトルともう 1 つのキャップが提供されます。この新しいボトルとキャップでもう 1 杯稼げるrmbかもしれません。ビールをもう 1 杯買うには十分かもしれません。maxbeers を複数回呼び出すため、実装はこれを限られた範囲で処理しますが、ビールをトラック 1 台分 (つまり25656 ボトル) 与えると、正しい答えが得られません。

持っている数がわかっている場合rmbは、紙に手書きで計算して、次のように書くことができます。

def maxbeers(rmb):
    return 7  # totally correct, I promise. Checked this by hand.

しかし、それは面白くありません。rmbだとしたら25656

交換できると仮定します:

2 bottles -> 1 rmb
4 caps -> 1 rmb
2 rmb -> 1 beer + 1 cap + 1 bottle

シミュレーションを通じて、次のように計算します。

def q(rmb):
    beers = 0
    caps = 0
    bottles = 0
    while rmb > 0:
        # buy a beer with rmb
        rmb -= 2
        beers += 1
        caps += 1
        bottles += 1

        # exchange all caps for rmb
        while caps >= 4:
            rmb += 1
            caps -= 4

        # exchange all bottles for rmb
        while bottles >= 2:
            rmb += 1
            bottles -= 2

    return beers

for a in range(20):
    print("rmb:", a, "beers:", q(a))

次に、20525 個のビールを購入できます。

于 2016-02-03T20:31:40.247 に答える