【问题标题】:Guess Number Python 2.7猜数字 Python 2.7
【发布时间】:2016-02-22 03:44:36
【问题描述】:

我在使用这个程序时遇到了问题。它应该生成一个介于 1 和 1000 之间的随机整数,但它会生成类似 627.68969869867986985747640967487598563876586805465097080967576587609787587658976098 的东西

 from random import *
 def main():

    numGuess = input ("guess your number")
    ranNum = randint(8, 100000)
    while ranNum <> numGuess:
        print numGuess
        numGuess = input ("guess your number")
        print numGuess
        ranNum = randint(0,1000)
        if numGuess > ranNum :
            print("ugg, your number is too big")
        else:
            print("whoops, your number is too small")
        if numGuess == ranNum :
            print("YAHOO, YOU GOT IT RIGHT!!!!!!!!")
   main()

有人能告诉我为什么这不起作用(它是在 python 2.7 编辑器中运行的) 此外,当您第一次输入您的号码时,它不会告诉您应该猜高还是低。

【问题讨论】:

  • 您如何确定它会生成这个看起来很奇怪的数字?我很难相信randint 给了你一些不是整数的东西。另外,你能正确格式化你的代码吗?例如,我不知何故怀疑你的 main 是无限递归的。
  • 好吧,在打印之前,您确实会询问用户两次,它是更高还是更低。
  • 您发布的代码有很多错误,但不像您描述的那样。
  • 这里有很多错误。试着真正想想你在做什么。例如,您不应该先询问用户两次猜测,然后才说出它是太大还是太小。
  • &lt;&gt; 已弃用。最好改用!=

标签: python python-2.7


【解决方案1】:

试试这个,刚刚在你的代码中更正了..

from random import *
def main():

    numGuess = 1
    ranNum = 10
    while ranNum <> numGuess:
        ranNum = randint(1,1000)
        numGuess = input ("guess your number")
        #print ranNum, "random"
        if numGuess > ranNum :
            print("ugg, your number is too big")
        elif numGuess < ranNum:
            print("whoops, your number is too small")
        else:
            print("YAHOO, YOU GOT IT RIGHT!!!!!!!!")
main()

【讨论】:

    【解决方案2】:

    有些事情是多余的或做错了,以下是对您的解决方案的修改,并进行了一些更改:

    from random import *
    def main():
    
        numGuess = -1
        ranNum = randint(1, 1000)
        while ranNum <> numGuess:        
            numGuess = input ("guess your number")
            print numGuess        
            if numGuess > ranNum :
                print("ugg, your number is too big")
            elif numGuess < ranNum:
                print("whoops, your number is too small")
            else:
                print("YAHOO, YOU GOT IT RIGHT!!!!!!!!")
    main()
    
    • 由于 while 循环之前的冗余调用,您在开始时要求用户输入两次
    • 调用ranNum = randint(8, 100000) - 不需要
    • 您只想在开始循环之前执行一次ranNum = randint(0,1000)
    • if/else/if 机制 - 可以改进(见上文)

    【讨论】:

      【解决方案3】:

      一些事情。您通常不应该在 Python 导入中使用 * (from module import *)。如果你只使用模块中的一个函数,使用from random import randint会更安全,你的代码也更容易理解。

      第一次猜测后,您正在重新分配您的 ranNum。一旦将 ranNum 重新分配给新值,您的第一个猜测可能会变为正确答案。

      另外,您的描述说您希望生成一个介于 1 和 1000 之间的随机数,但是您对 ranNum 的第一个分配是 ranNum == randint(8, 10000),这将生成一个介于 8 和 10000 之间的随机整数。

      我的建议是删除循环之外的名称分配,并将您的 while 条件更改为 while True:,然后在您的 if numGuess == ranNum: 逻辑中,添加一个 break 语句以中断 main() 内的循环。

      至于你的问题,我不相信你会得到一个长的结果,比如你使用 randint() 提供的结果。您是否遗漏了部分代码?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 2021-04-03
        • 2013-10-09
        • 2018-10-14
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多