Python Forum

Full Version: problem with for loop using integers
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Ok, so totally green but super keen!

I programmed a 'dice' attack value game, that prompts a user to choose n die to roll and with what 'attack value' the dice will have. the object is for a war board game, not important... Program seems to run fine, but sometimes it runs the 'for' loop more times than the user prompted for.... What am I doing wrong with this for loop? (code below)

while True:
    print("welcome to the dice game!")
    import random
    a=input("how many die would you like to roll? ")
    b=input("what is the attack value of the die? ")
    aa=int(a)
    bb=int(b)
    print('OK... anything ',b,'or less, is a hit!')
    print('Here we go!')
    hit=0
    miss=0
    for x in iter(aa):
        j=random.randint(1,6)
        if j<=bb:
            print(j,'hit')
            j=hit
            hit=hit+1
        if j>bb:
            print(j,'miss')
            j=miss
            miss=miss+1
    print('total hits: ',hit)
    print('total misses: ',miss)
    y=input('would you like to play again (y/n)')
    if y=='y':
        continue
    if y=='n':
        break
    if y!='y' and y!='n':
        print('invalid answer')
        break
print('thanks for playing!')
also not sure how to paste code to include indentation on this forum... sorry.
(Aug-31-2019, 02:49 AM)python_germ Wrote: [ -> ]Program seems to run fine,

Hmmm... I have my doubts: on line # 6 you convert aa to int and on line # 12 you create iterator from that. This would happen:

>>> aa = 5
>>> iter(aa)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
Thanks for your reply @perfringo.
whats the solution then? I'm trying to create a loop for a user chosen integer...
it's the wording of the phrase in line 12 I cant figure out...
For starters you should follow PEP 8 -- Style Guide for Python Code .

If you want create loop from integer then use range:

>>> for i in range(3):
...    print(i)
... 
0
1
2
EDIT:
You don't need to use iter() in for-loop, it will be created by Python automagically (but of course it must be sequence). For more information use built-in help:

>>> help('for')    # q for exiting the help
A bit of advise - get rid of habit to use one- or two-char cryptic variable names. It will be hell to maintain such code.
Agree with Buran. Using descriptive variable names is helpful.

But, I think I found another issue. Inside the for loop you have two tests comparing j to bb. If the first test passes you make a change to the value of j. It is therefore possible that the comparison will pass both times, counting as both a hit and a miss. I don't think that is your intent. Instead, change line 18 to
    else: