2016-10-14 16 views
0

私はループ中に他のものを見てきました。pythonでカウンタが有効になっていません

points = int(input('How many points: ')) 
while True: 
    u_cnt, c_cnt = 0, 0 
    if u_cnt < points or c_cnt < points: 
     if u < c: 
      c_cnt += 1 
     elif u > c: 
      u_cnt += 1 

私の問題は2つのif文の中にc_cnt += 1がありますか?

私はwhileループの外に置いていますが、それでもカウントは増加しません。 u_cnt = 0c_cnt = 0を別々の行に入れました。

無限ループをしているわけではありません。増分していないだけです。

はありがとう

編集:そう

import random 

u_name = input('What is your name? ') 
points = int(input('How many points: ')) 
u_cnt, c_cnt = 0, 0 

while True: 
    a = ['rock', 'paper', 'scissors'] 
    comp = random.choice(a) 
    print('Pick from:', str(a).strip('[]')) 
    user = input() 
    u = a.index(user) 
    c = a.index(comp) 
    line_1 = '{} : {}\t{} : {}'.format(u_name, user, 'Computer', comp) 
    line_2 = '{} : {}\t{} : {}\n'.format(u_name, u_cnt, 'Computer', c_cnt) 

    if c_cnt < points or u_cnt < points: 
     if u > c or u == 0 and c == 2: 
      u_cnt += 1 
      print(line_1, '\t', u_name, 'wins') 
      print(line_2) 
     elif u < c or u == 2 and c == 0: 
      c_cnt += 1 
      print(line_1, '\t', 'Computer wins') 
      print(line_2) 
     elif u == c: 
      print(line_1, '\t', 'Tie') 
      print(line_2) 
    else: 
     break 

あなたは、この最初の時間を実行して、あなたは答えバックのような

カウントが1であることを取得する方法

What is your name? chad 
How many points: 3 
Pick from: 'rock', 'paper', 'scissors' 
rock 
chad : rock Computer : scissors  chad wins 
chad : 0 Computer : 0 

Pick from: 'rock', 'paper', 'scissors' 
、0を取得します最初の反復でそれはより良い質問かもしれません。

+3

ループを入力するたびにカウンタをゼロにリセットします。 'u_cnt、c_cnt = 0、0'を' while'の前に置きます。 – Efferalgan

+2

ループから抜ける仕組みがないので、「無限ループをしていません」とは思わない。 –

+0

@JulienSpronck合意。そのコードはどのようにループから抜け出すことができますか? "ブレイク"ステートメントと "raise ..."ステートメントはありませんので、決して出ることはできません。 – Frogboxe

答えて

0

ループを再度実行するたびにカウンターを0にリセットするので、カウンタがゼロになるだけです。この問題を解決するには、ループの外で、あなたの変数宣言を移動することができます。

points = int(input('How many points: ')) 
u_cnt, c_cnt = 0, 0 
while True: 
    if u_cnt < points or c_cnt < points: 
     if u < c: 
      c_cnt += 1 
     elif u > c: 
      u_cnt += 1 

あなたもあるが、ループを終了する何のメソッドを持っていません。ループを終了するには、の改行をに追加する必要があります。たとえば:

while True: 
    if some_condition: 
    break 
+0

"true"は定義されていません –

+0

@JulienSpronck私はそれを修正しました。私は私のiPadでこれに答えているので、コードを入力するのはかなり難しいです。 –

+0

心配はありません;-)私はちょうどインデントを編集しました。 –

1

コードは右そこにあります。それは私のような他の初心者を助けを期待して、このすべてを書き出す

points = int(input('How many points: ')) 
u_cnt, c_cnt = 0, 0 # asign the values before the loop 
while True: 
    if u_cnt < points or c_cnt < points: 
     if u < c: 
      c_cnt += 1 
     elif u > c: 
      u_cnt += 1 
+0

これは無限ループを行っています。 – Jaco

+0

あなたが 'if'と' elif'を使っているからです。あなたの 'u'と' c'の値に依存して、 'if'や' elif'文にコードが入力されない場合、 'elif u> c:'の 'else:' instedだけを試してみることもできます。ループは評価の前に値を出力します: 'print(" u_cnt: "、u_cnt)' –

0

。もし他の人が私よりもそれをよく説明できればコメントしてください。

だから、これは私もそれにCTRL-Dを入れていなかった
http://openbookproject.net/pybiblio/practice/wilson/rockpaperscissors.php
from- pythonの初心者の練習問題でした。

私はそれが欲しかったコードをコメントします。それはそれぞれの試行が終わったときのカウントを与えるものです。

import random 

u_name = input('What is your name? ') 
points = int(input('How many points to play to? ')) 
u_cnt, c_cnt = 0, 0 
a = ['rock', 'paper', 'scissors'] 

while u_cnt < points or c_cnt < points: 
    comp = random.choice(a) 
    print('Pick from:', str(a).strip('[]')) 
    user = input() 
    u = a.index(user) 
    c = a.index(comp) 
    line_1 = '{} : {}\t{} : {}'.format(u_name, user, 'Computer', comp) 
    if u > c or u == 0 and c == 2: 
     u_cnt += 1 
     print(line_1, '\t', u_name, 'wins') 
    elif u < c or u == 2 and c == 0: 
     c_cnt += 1 
     print(line_1, '\t', 'Computer wins') 
    elif u == c: 
     print(line_1, '\t', 'Tie') 

    line_2 = '{} : {}\t{} : {}\n'.format(u_name, u_cnt, 'Computer', c_cnt) 
    print(line_2) 
    if u_cnt == points or c_cnt == points: 
     if u_cnt > c_cnt: 
      print('\n', u_name.upper(), 'WINS!!!') 
     elif u_cnt < c_cnt: 
      print('\n', 'COMPUTER WINS!!!') 
     print(line_2) 
     break 

exit() 

私はそれが適切にインクリメントなるように、私の最初のifループの最後でline_2を入れていた各試行のための私のカウントを取得します。

元の投稿を見ると、最初にifの文の外にline_2があることがわかります。これは、ループ全体を通過し、すぐにそれを追加するのではなく、次回のカウントを追加するようにしていました。

私は2番目のifステートメントを入れて、ループをテストして、勝者が誰であったかを表示します。

また、私は余分なprint(line_2)文を元の投稿に入れていたことを知りました。もし私が入力しただけでは私の入力を減らすことができました。

私はこれを他の練習サイトでやっていますが、これは私がしなければならなかった最も少ない量のif, elifです。

彼らが何をしているのかを知っている人々は、練習コード、コードを読んで、練習コードを教えてくれるので、

ご協力いただきありがとうございました。
em

関連する問題