0

更新されたコード:

  #RockPS
import random

Choices=['R','P','S']
UserScore=0
CpuScore=0
Games=0

while Games<6:
    UserChoice=input('Rock, paper or scissors? (Type R, P or S respectively)')
    if UserChoice in Choices:
        Games+=1
CpuChoice = random.choice(Choices)   

if UserChoice == 'S' and CpuChoice == 'P':
    UserScore+=1
if UserChoice == 'P' and CpuChoice == 'R':
    UserScore+=1
if UserChoice == 'R' and CpuChoice == 'S':
    UserScore+=1
if UserChoice == 'S' and CpuChoice == 'R':
    CpuScore+=1
if UserChoice == 'P' and CpuChoice == 'S':
    CpuScore+=1
if UserChoice == 'R' and CpuChoice == 'P':
    CpuScore+=1

else:
    print('Only R, P or S are allowed')


print(UserScore, CpuScore)
if UserScore>CpuScore:
    print('Well done, you won!')
if UserScore==CpuScore:
    print('You tied!')
if UserScore<CpuScore:
    ('Unlucky, you lost.')

まだ1つの問題があります。スコアが印刷されると、どちらの方法でも 1 0 とだけ表示されます。これは、多数の勝利を収めたプレーヤーに当てはまります。各ゲームをカウントする必要があります。たとえば、3 2 または 4 1 です。

4

4 に答える 4

3

おそらく唯一の問題ではありませんが、すぐに思いつくのは次のとおりです。

random.choice(CpuChoice)

コンピューターのランダムな選択に CpuChoice を設定しません。random.choice() はランダムな選択肢を返しますが、それをどこにも保存しません。あなたがしたい

CpuChoice = random.choice(['Rock', 'Paper', 'Scissors'])

...そして、CPUが毎回同じ選択肢をプレイしない限り、ループ内でそれを実行したい(そしてユーザー入力を収集し、おそらく個々のラウンドの結果を出力します)。これにより、非常に簡単に倒すことができます:)

また、どこでも Games をインクリメントすることはありません。実際には、while ループの代わりに、本体を 6 回実行したいだけなので、おそらく for ループが必要です。

于 2012-04-17T17:05:16.283 に答える
1

ループに入力する必要があります。プレイしたゲームの数を増やすことを忘れないでください。

于 2012-04-17T17:03:17.280 に答える
1

あなたのコードには多くの問題があります:

  1. random.choice正しく使用していません。
  2. ユーザーがプレイする前に毎回その関数を呼び出す必要があります。一度呼び出すと、毎回同じままになります。
  3. input(...)関数はループで 1 回呼び出されるため、ユーザーは値の入力を 1 回求められます。
  4. これは変数に名前を付ける方法ではありません (少なくとも Python では)。
  5. if/elif を何度も使用して同じことを行うのは、使用方法ではありませんor

したがって、コードは次のようになります。

#RockPS
import random

game_choices = ['R','P','S']
user_score = 0
cpu_score = 0
games = 0

while games<6:
    user_choice = input('Rock, paper or scissors? (Type R, P or S respectively)')
    if user_choice in game_choices:
        games += 1
        cpu_choice = random.choice(cpu_choices)
        if (user_choice == 'S' and cpu_choice == 'P') or \
           (user_choice == 'P' and cpu_choice == 'R') or \
           (user_choice == 'R' and cpu_choice == 'S'):
            user_score += 1
        elif (user_choice == 'S' and cpu_choice == 'R') or \
             (user_choice == 'P' and cpu_choice == 'S') or \
             (user_choice == 'R' and cpu_choice == 'P'):
            cpu_score += 1
    else:
        print('Only R, P or S are allowed')

print(user_score, cpu_score)
if user_score>cpu_score:
    print('Well done, you won!')
elif user_score == cpu_score:
    print('You tied!')
elif user_score<cpu_score:
    print('Unlucky, you lost.')

まだまだ改善できます。文字が RPS であることを確認するチェックを追加しました。そして、この大きな条件のチャンクは、勝者を返す関数 (たとえば、CPU が勝った場合は 1、プレイヤーが勝った場合は 0) を使用して条件を短くすることができます...

于 2012-04-17T17:24:00.807 に答える
0

ここで、私はあなたのためにそれを修正しました。

ヴェルデがどのような変更を加えたかを確認できるように、私はあなたのスタイルを模倣し、できる限りのことを維持しようとしました。とはいえ、そのスタイルは一般的に推奨されていません。より良いスタイルについては、jadkik94の回答を参照してください。たぶん、このプログラムを後で編集して書き直します。時間があれば。

import random
CpuChoices=['Rock','Paper','Scissors']
PlayerChoices = dict(zip("RPS", CpuChoices))
UserScore=0
CpuScore=0
Games=0
while Games<6:
    UserChoice=input('Rock, paper or scissors? (Type R, P or S respectively)')
    if UserChoice not in PlayerChoices: continue
    CpuChoice = random.choice(CpuChoices)

    if UserChoice=='S' and CpuChoice=='Paper':
        UserScore+=1
    elif UserChoice=='P' and CpuChoice=='Rock':
        UserScore+=1
    elif UserChoice=='R' and CpuChoice=='Scissors':
        UserScore+=1

    if UserChoice=='S' and CpuChoice=='Rock':
        CpuScore+=1 
    elif UserChoice=='P' and CpuChoice=='Scissors':
        CpuScore+=1
    elif UserChoice=='R' and CpuChoice=='Paper':
        CpuScore+=1
    print("CPU chose %s against your %s" % (CpuChoice, PlayerChoices[UserChoice]))
    print("User: %s - CPU: %s" % (UserScore, CpuScore))
    Games += 1

if UserScore > CpuScore:
    print('Well done, you won!')
if UserScore == CpuScore:
    print('You tied!')
if UserScore < CpuScore:
    print('Unlucky, you lost.')

print("the only winning move it not to play")

約束したように、これが私がそれを書いた方法のコードです(まあ、実際にはそうではありませんが...あなたはアイデアを得るでしょう):

import random

class RSPHand(object):
    names = ('Rock', 'Paper', 'Scissors')
    beats = {
            'Rock': 'Scissors',
            'Scissors': 'Paper',
            'Paper': 'Rock',
            }
    def __init__(self, name):
        if name not in self.__class__.names:
            try:
                name = [n for n in self.__class__.names if n[0] == name.upper()][0]
            except IndexError:
                raise ValueError ("Name not valid")
        self.name = name
        self.shortname = self.name[0]
    def __repr__(self):
        return "%s(%s)" % (self.__class__.__name__, self.name)
    def __str__(self):
        return self.name
    def __gt__(self, other):
        return other.name == self.__class__.beats[self.name]
    def __lt__(self, other):
        return self.name == self.__class__.beats[other.name]

choices=[]
for name in RSPHand.names:
    choices.append(RSPHand(name))


playerscore = cpuscore = 0

while True:
    rounds = input("Best out of how many rounds? ")
    try:
        rounds = int(rounds)
    except ValueError:
        continue
    break

while rounds:
    playerchoice = input("%s? (Type first letter, lowercase or not, or full name) " % [choice.name for choice in choices])
    try:
        playerchoice = RSPHand(playerchoice)
    except ValueError:
        continue
    cpuchoice = random.choice(choices)
    print ("CPU chose %s against your %s" % (cpuchoice, playerchoice))
    if playerchoice < cpuchoice:
        cpuscore += 1
        print("too bad for you")
    elif playerchoice > cpuchoice:
        playerscore += 1
        print("too bad for CPU")
    else:
        print("that's a tie for this round")
    print ("CPU: %s - Player: %s" % (cpuscore, playerscore))
    rounds -= 1

if playerscore > cpuscore:
    print('Well done, you won!')
elif playerscore == cpuscore:
    print('You tied!')
elif playerscore < cpuscore:
    print('Unlucky, you lost.')
于 2012-04-17T17:33:16.673 に答える