【问题标题】:Python code to randomly guess user input numberPython代码随机猜测用户输入数字
【发布时间】:2022-10-18 11:02:14
【问题描述】:

我刚刚完成(我正在查看旧代码并发现了这个)但实际上这是最终代码 最后更新:现在一切都好 多亏了这个奇数公式。 n个奇数的和是n^2 我们是如何得出这个公式的

  • 前 1 个奇数 = 1 总和 = 1 = 1^2
  • 前 2 个奇数 =1,3 和 = 4 = 2^2
  • 前 3 个奇数 = 1,3,5 和 = 9 = 3^2
  • 前 4 个奇数 =1,3,5,7 和 = 16 4^2
  • 前 5 个奇数 = 1,3,5,7,9 总和 = 25 =5^2
  • 因此 n 个奇数的总和 = n^2

import random,os
userI =True
os.system("cls")
def randomOddNumber(a,b):
  a = a // 2
  b = b // 2 - 1
  number = random.randint(a,b)
  number = (number * 2) + 1
  return number
while userI==True:
    userInput = int(input("Please input a 4 digit number: "))
    compNumber = random.randint(1000, 9999)

    count = 0
    while userInput != compNumber:
         
        if (userInput % 2) == 0:

                compNumber= random.randrange(0, 10000, 2)
                count=count+1
        else:
              compNumber = randomOddNumber(0,9999)
              count =count+1
    print("Match was created on the", count, "attempt.")
    ex = False
    while ex == False:
        userAwnser = input("Would you like to play again?: ")
        if userAwnser == "no"or userAwnser=="No":
            userI = False
            ex = True
        elif userAwnser == "yes"or userAwnser=="Yes":
            userI = True
            ex = True
            os.system("cls")
        else:
            print("Error Not a valid awnser")
            ex = False

【问题讨论】:

  • 这里有很多问题。 input 返回一个字符串,而不是 4 个整数。您将需要输入一个字符串,然后将其转换为整数并确保它在 1000 和 9999 之间。然后,您真的不需要随机猜测。你想从中间开始(5500),让用户告诉你“更高”和“更低”,然后分割差额。它应该不超过 14 次猜测。
  • a,b,c,d = [int(digit) for digit in input("enter a 4 digit number")]

标签: python artificial-intelligence


【解决方案1】:

这里的主要问题是您试图强制 input() 将您的字符串输入拆分为四个变量。即使您想将其转换为整数,也需要使用 for 循环或等效循环将其分隔为列表。此外,对于您的情况,每个数字拆分都是多余的,您可以将整数与 4 位随机整数进行比较(例如:randint(1000, 9999)。下面是一种更简单、更有效的方法:

import random

userInput = int(input("Please input a 4 digit number: "))
compNumber = random.randint(1000, 9999)


count = 0
while userInput != compNumber:
    compNumber = random.randint(1000, 9999)
    count += 1
print("Match was created on the", count, "attempt.")

如果您有任何问题,请发表评论!

注意:这没有任何用户输入验证,如果给定一个字符串,它将中断,如果输入是大于 9999 或小于 1000 的数字,则将处于永远循环中

【讨论】:

  • 你会如何添加一个重演系统?我试过但没有用
  • 你能做的就是把整个事情放在一个 While True: 循环中。如果您愿意,我可以使用包含的循环再次回答!
  • import random userI = "true" while userI == "true": userInput = int(input("请输入一个 4 位数字:")) compNumber = random.randint(1000, 9999) count = 0 while userInput != compNumber : compNumber = random.randint(1000, 9999) count += 1 ex = False print("比赛是在", count, "attempt.") while ex == False: userAwnser =str( input("你愿意想再玩一次")).lower if userAwnser =="no": userI = True elif userAwnser == "yes": userI = False else: print("Error Not a valid awnser") ex = False
  • 我得到了这个错误“,第 1 行,在 <module> 中导入随机第 5 行,在 <module> compNumber = random.randint(1000, 9999) AttributeError: partial initialized module 'random' has no attribute 'randint' (很可能是由于循环导入)
【解决方案2】:
while True:
    master = int(input("enter a 4 digit number: "))
    if 1000 <= master <= 9999:
        break
    print("That's not a 4-digit number.")

guess = 5500
delta = guess // 2
tries = 0
while guess != master and tries < 10:
    tries = tries+1
    nxt = input(f"My guess is {guess}.  Is your number higher or lower? ")
    if nxt[0] == 'h':
        guess += delta
    elif nxt[0] == 'l':
        guess -= delta
    else:
        print("Come on, type 'higher' or 'lower'.")
        continue
    delta //= 2
    
if master == guess:
    print(f"My guess is {guess}.  I got it right in {tries} tries")
else:
    print("I didn't get it in 10 tries.")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多