Python 输入后在random.randrange之外不断生成新数字

Python 输入后在random.randrange之外不断生成新数字,python,function,random,integer,Python,Function,Random,Integer,基本上,我的程序是一个数字猜测游戏,包括一些东西,如轮数,将确定该数字是否已经说过,如果数字超出范围(1和100) 在生成一个函数(检查它是否为整数)之后,我不会在while循环中重复代码,我的代码似乎在每次输入猜测后都会生成一个新的数字进行猜测,当再次输入相同的数字时,它会注意到并返回,表示之前已经输入了该数字,但随后会说该数字是否过高,这是我不想要的。非常感谢您提供有关如何解决此问题的任何帮助 # Higher / Lower version 4 # Basic program works

基本上,我的程序是一个数字猜测游戏,包括一些东西,如轮数,将确定该数字是否已经说过,如果数字超出范围(1和100)

在生成一个函数(检查它是否为整数)之后,我不会在while循环中重复代码,我的代码似乎在每次输入猜测后都会生成一个新的数字进行猜测,当再次输入相同的数字时,它会注意到并返回,表示之前已经输入了该数字,但随后会说该数字是否过高,这是我不想要的。非常感谢您提供有关如何解决此问题的任何帮助

# Higher / Lower version 4
# Basic program works has loop but does not ask for num of rounds or store best score and says if number was already entered.
import random

# List for already said inputs
tried_num = []

# Score
best_score = 25

# Rounds
rounds_played = 0
valid_round = False

# Checks numeric input is valid
def int_check(question,min,max):
    valid = False
    while not valid:
        try:
            response = int(input(question))
            if response < min or response > max:
                print("\n Whoops!  Please enter an INTEGER between {} and {}".format(min,max))
            else:
                valid = True
                return(response)

        except ValueError:
            print("You did not enter an INTEGER.  Please try again")


rounds_wanted = int_check("How many rounds would you like to play? (1 - 10): ",1,10)

while rounds_played < rounds_wanted:

    # Generate random integer
    gen_num = random.randrange(1,100)
    print(gen_num)

    # Guess
    num_guesses = 0
    guess = int_check("Guess the number between 1 and 100: ",1,100)

    if guess not in tried_num:
        num_guesses += 1
        tried_num.append(guess)
    else:
        print("You already guessed that number, Try a differnet one \n")


    # Num of guesses till round ends
    if num_guesses > 26:
        print("You Lose! You have used up your 25 guesses, the number was %s" % gen_num)


    elif guess > gen_num:
        print("Your guess was to high , Try a lower number \n")

    elif guess < gen_num:
        print("Your guess was to low , Try a higher number \n")

    elif num_guesses == 1:
        rounds_played = rounds_played + 1
        print("Congratulations you have won, you guessed the number in 1 Guess!!")

    else:
        rounds_played = rounds_played + 1
        print("Congratulations you have won, you guessed the number in %s guesses \n" % num_guesses)

    # Update Best Score if number of guesses is lower
    if num_guesses < best_score:
        best_score = num_guesses

if best_score < 26 :
    print("Your best score was: %s!" % best_score)
#更高/更低版本4
#基本程序运行时有循环,但不要求轮次数或存储最佳分数,并说明是否已输入该数字。
随机输入
#上述输入的列表
已尝试。\u num=[]
#得分
最佳分数=25
#轮
已播放的轮数=0
有效=错误
#检查数字输入是否有效
def int_检查(问题、最小值、最大值):
有效=错误
虽然无效:
尝试:
回答=int(输入(问题))
如果响应<最小值或响应>最大值:
打印(“\n哎呀!请输入一个介于{}和{}之间的整数”。格式(最小值,最大值))
其他:
有效=真
返回(响应)
除值错误外:
打印(“您没有输入整数,请重试”)
想要多少轮=整数检查(“你想玩多少轮?(1-10):”,1,10)
当轮次\u播放时26:
打印(“您输了!您已经猜了25次,数字是%s”%gen_num)
elif guess>gen_num:
打印(“您的猜测过高,请尝试较低的数字\n”)
elif guess
虽然您有一个循环来控制所选轮数的播放,但每次围绕该循环的主体,您都只要求进行一次猜测。您确实需要在现有循环中使用一个循环来控制单轮的播放。您可以在下面修订的代码中看到嵌套循环结构(第三个嵌套循环用于处理重复猜测)

随机导入
def int_检查(问题、最小值、最大值):
有效=错误
虽然无效:
尝试:
回答=int(输入(问题))
如果响应<最小值或响应>最大值:
打印(“\n哎呀!请输入一个介于{}和{}之间的整数”。格式(最小值,最大值))
其他:
有效=真
返回(响应)
除值错误外:
打印(“您没有输入整数,请重试”)
轮数=20
最大猜测数=5
成功=0
对于范围内的轮数(需要轮数):
gen_num=random.randrange(1100)
打印(“+++游戏”,轮数+1,“-秘密是”,世代数)
先前的猜测=[]
猜测=无
对于范围内的猜数(最大猜数):
#猜猜看
虽然不是先前的猜测或先前猜测中的猜测:
guess=int\u check(“guess{}:”.format(guess\u number+1),1100)
如果之前的猜测中有猜测:
打印(“您已经猜到了”,猜到了,“-请再试一次”)
其他:
先前的猜测。追加(猜测)
打破
如果guess==gen_num:
成功+=1
打印(“做得好,你做到了!”)
打破
其他:
打印(“抱歉-重试”)
其他:
打印(“我赢了这个!”)
打印(“迄今为止的成功:”,成功,“超出”,第1轮)
打印(“谢谢播放”)

对不起,我是python新手,我该如何将其与变量一起放入代码中我已经重写了我的答案,以向您展示(或者更确切地说)正确的程序结构。您会注意到,我已经对每轮变量进行了轮数和猜测,因此很容易降低它们进行测试。
import random

def int_check(question,min,max):
    valid = False
    while not valid:
        try:
            response = int(input(question))
            if response < min or response > max:
                print("\n Whoops!  Please enter an INTEGER between {} and {}".format(min,max))
            else:
                valid = True
                return(response)

        except ValueError:
            print("You did not enter an INTEGER.  Please try again")

rounds_wanted = 20
max_guesses = 5
successes = 0
for round_number in range(rounds_wanted):
    gen_num = random.randrange(1,100)
    print("+++ Game", round_number+1, "- secret is", gen_num)
    previous_guesses = []
    guess = None    
    for guess_number in range(max_guesses):
        # get the next guess
        while not previous_guesses or guess in previous_guesses:
            guess = int_check("Guess {}: ".format(guess_number+1), 1, 100)
            if guess in previous_guesses:
                print("You already guessed", guess, "- please try again")
            else:
                previous_guesses.append(guess)
                break
        if guess == gen_num:
            successes += 1
            print("Well done - you got it!")
            break
        else:
            print("Sorry - try again")
    else:
        print("I won this one!")
    print("Successes so far:", successes, "out of", round_number+1)
print("Thanks for playing")