Python从一开始就循环重启代码

时间:2018-02-17 00:02:37

标签: python loops while-loop

需要帮助在我的代码中添加while循环,以便在用户同意后再次从头开始。每当我在代码的末尾添加它时,它会在我运行它时跳过它而我根本不知道该怎么做。欢迎任何帮助。谢谢!

print('Welcome to the Dice Game')
print(" ")
print('This program will simulate rolling a dice and will track the frequency each value is rolled.')
print(" ")
print('After rolling the dice, the program will output a summary table for the session.')
print(" ")
raw_input("Press Enter to continue...")

# function to roll the dice and get a value
def roll_dice():
    r=random.randint(1,6)
    return r
#to track the number of times rolled the dice
rolled=0

# to track the number of remaining turns
remaining=10000

# list to store the results
result=[]

# to track the number of sessions
sessions=0

while True:
    #incrementing the session variable
    sessions+=1

    #getting the number of turns from the user     
    n=int(input("How many times would you like to roll the dice? "))



    #checking the number of turns greater than remaining turns or not
    if n > remaining:
        print('You have only remaining',remaining)
        continue
    #rolling the dice according to the value of n
    if rolled <= 10000 and n <= remaining :
        for i in range(n):

            result.append(roll_dice())

    #updating the remaining turns and rolled variables         
    remaining=remaining-n
    rolled=rolled+n


    #printing the results and session variable
    if rolled==10000:
        print('---------------')
        for i in range(len(result)):
            print('|{:7d} | {:d} |'.format( i+1,result[i]))
        print('---------------')
        print('Rolled 10000 times in %d sessions' % sessions)
        sys.exit(0)

2 个答案:

答案 0 :(得分:1)

您的rolledremainingresultsessions变量会在while循环的下一次迭代中持续存在。您需要在循环的每次迭代中重新定义变量,因为您正在检查remaining变量以检查用户是否结束了。
所以而不是:

def roll_dice():
    # ...

rolled = 0
remaining = 10000
result = []
sessions = 0

while True:
    # ...

你需要:

def roll_dice():
    # ...

while True:
    rolled = 0
    remaining = 10000
    result = []
    sessions = 0
    # ...

答案 1 :(得分:1)

我在代码中看到了许多不必要的变量和比较,更简洁的代码通常会减少错误并提高可读性。

我建议这样的事情:

def do_dice_game(rounds=1000):
    sessions = 0
    rolls = []
    while rounds > 0:
        sessions += 1
        user_input = rounds + 1
        while user_input > rounds:
            user_input = int(raw_input("..."))
        rolls += [random.randint(1, 6) for i in range(user_input)]
        rounds -= user_input
    # print something


def do_games():
    to_continue = True
    while to_continue:
        do_dice_game()
        to_continue = raw_input("...") == "continue"

另外,根据您的代码,每个会话的数量对最终&#34;滚动&#34;没有影响。结果。您始终只需记录会话数,然后在末尾滚动1000个随机数。