简体   繁体   中英

Simple dice roll program issue

I have created a program where the user can select a certain sided dice then it rolls and outputs the number generated, it then asks if the user wants to roll again and by using a while loop. i have wrote the program and for some reason it keeps on repeating the input dice side number prompt and i don't know why, here is the code

import random

roll_agn='yes'
    while roll_agn=='yes':
        dice=input ('Please choose a 4, 6 or 12 sided dice: ')
        if dice ==4:
                print(random.randint(1,4))
        elif dice ==6:
                print(random.randint(1,6))
        elif dice ==12:
                print(random.randint(1,12))
    else:
        roll_agn=input('that is not 4, 6 or 12, would you like to choose again, please answer yes or no') 
    if roll_agn !='yes':
        print ('ok thanks for playing')

I suspect it is something to do with the while loop or the indentation, but I have been fiddling with it for like 3o mins and i cant get it to work properly, so if someone could help me out here it would be appreciated, Thanks !

The indentation on else: roll_agn=input is such that it only runs after you exit the while loop - but the while loop can never end until you run the else clause, therefore infinite loop.

Here is a cleaned-up, better-structured version:

# assumes Python 3.x
from random import randint

def get_int(prompt):
    while True:
        try:
            return int(input(prompt))         # if Python 2.x use raw_input instead of input
        except ValueError:
            # not an int
            pass

def get_yn(prompt):
    while True:
        value = input(prompt).strip().lower() # if Python 2.x use raw_input instead of input
        if value in {'y', 'yes'}:
            return True
        elif value in {'n', 'no'}:
            return False

def roll(sides):
    return randint(1, sides)

def main():
    while True:
        sides = get_int("Number of sides on die (4, 6, or 12)? ")

        if sides in {4, 6, 12}:
            print("You rolled a {}".format(roll(sides)))
        else:
            print("U no reed gud?")

        if not get_yn("Play again (y/n)? "):
            print("Thanks for playing!")
            break

if __name__=="__main__":
    main()

It looks like you have indentation problems with the if statements. Try lining up elif with if.

if dice ==4:
    print(random.randint(1,4))
elif dice ==6:
    print(random.randint(1,6))
elif dice ==12:
    print(random.randint(1,12))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM