长安白猫 2019-03-20 11:51 采纳率: 50%
浏览 2780
已采纳

在猜数游戏中 while 循环里 guess=int(input(""))和 if int(guess) 使用有什么区别呢

1.Python中我按照python 2的教材在python 3 上写了一个猜数小游戏 但是运行之后 我写的代码在我猜对了数之后不会跳出循环, 而是又一次的开始了循环,直到次数用完。后来找大神改了一下代码可以成功运行了,但是对于其中 guess=int(input(""))和 if int(guess)有了疑问。
我用的就是Python自带的 IDLE

2.教材上的代码:

import random
secret = random.randint(1, 99)
guess = 0
tries = 0
print ("AHOY! I'm the Dread Pirate Roberts,and I have a secret!")
print ("It is a number from 1 to 99,I'll give you 8 tries. ")
while guess != secret and tries < 8:
    guess = input("what's yer guess? ")
    if guess < secret:
        print ("太小")
    elif guess > secret:
        print ("太大!")
    tries = tries + 1
if guess == secret:
    print ("答对了")
else:
    print ("没有机会了!")
    print ("正确答案",secret)

如果我按照教材上的代码运行会报错:
图片说明
大概意思就是不同的类型不能比较大小。所以我就在我的代码上改进了一下。

(2)我自己的代码:
因为教材上是在py 2上写的 我是在Py 3写的 所以有一点改动就是在guess前面加上了int

import random
secret = random.randint(1, 99)
guess = 0
tries = 0
print ("AHOY! I'm the Dread Pirate Roberts,and I have a secret!")
print ("It is a number from 1 to 99,I'll give you 8 tries. ")
while guess != secret and tries < 8:
    guess = input("what's yer guess? ")
    if int(guess) < secret:
        print ("太小")
    elif int(guess) > secret:
        print ("太大!")
    tries = tries + 1
if int(guess) == secret:
    print ("答对了")
else:
    print ("没有机会了!")
    print ("正确答案",secret)

但是我自己写的是可以运行了但是不会跳出while循环 我就很奇怪了,下面是我的运行结果报错:
图片说明
就是说我在第五次已经猜对了,但是并没有跳出循环而是继续让我猜了。(不能使用break,就是用单纯的while循环)

(3)大神改进后的代码:大神只是在教材上的代码稍加改动,结果就可以正确运行了,大神在源代码的

guess = input("what's yer guess? ")

改成了

guess = int(input("what's yer guess? "))

是在input钱加了int 详细如下:

import random
secret = random.randint(1, 100)
guess = 0
tries = 0
print ("AHOY! I'm the Dread Pirate Roberts,and I have a secret!")
print ("It is a number from 1 to 99,I'll give you 8 tries. ")
while guess != secret and tries < 8:
    guess = int(input("what's yer guess? "))
    if guess < secret:
        print ("太小")
    elif guess > secret:
        print ("太大!")
    tries = tries + 1
if guess == secret:
    print ("答对了")
else:
    print ("没有机会了!")
print ("正确答案",secret)

这样就可以完美输出了结果如下:
图片说明在第七次猜对之后直接跳出循环并结束了;大神给我简单解释说:在input上加, guess就是一个数值类型了,并且在当前循环中都是的; 你在 if int(guess)中这样使用
只是把输入的字符串变成了int 并没有赋值 ,此时guess还是字符串类型,你这种 guess = int(guess)
把转换成int的重新赋值在一个变量上才行.如果我输入40 本应该和随机的相等的,但是此时的40不是int

类型啊,字符串和int做比较,那怎么会相等呢."if ‘40’== 40,是这种形式了".
但是我不理解的是既然我的方法并没有让guess变成int型那代码是怎么运行并且还判断了大小了呢。
为此我有和我学Java的同学聊了一下 但是Java和Python语法上会有相差没有搞懂:

图片说明
现在就想请教一下大神 我这个是一个什么情况 ,第一次提问还是恳请大神讲解一下 本人是自学小白 只是大学学了一点编程
再补充一下: 就是我自己改的代码哪里一直没有跳出循环我一开始以为是缩进问题,但是我试过了并不是 而且我试着在print("答对了")下一行加上 break 结果我的代码就也能比较大小也能完美运行了,所以就对大神给我的解释更蒙了

我这个其实总共出现了两个问题吧一个是我的那种方法为什么不会跳出循环呢 第二个就是按照大神那样的改的话while 循环里 guess=int(input(""))和 if int(guess) 使用有什么区别呢

  • 写回答

2条回答

  • Python_Leaner 2019-03-20 12:54
    关注

    首先,我也是自学小白,在看python从入门到实践,也就是python创始人写的书。你的问题我看了下,我自己写过后发现,兄弟,你在下面的if
    语句中用了int(guess),那么上面while呢? 难道不应该是 while int(guess) != secret and tires < 8 : 吗?后面的你就不用改了
    看我耐心的看了你的代码后,你看看我的代码,能在猜对了就退出,还能显示猜的次数,但是我这也有不明白的,我那个else为什么可以在哪个位置,不用缩进。我去,自己都把自己尴尬到了,你自己copy后运行一下(csdn中缩进我还是不会搞于是我就贴图了),猜对猜错都试一试,然后咱么两个小白互补一下图片说明
    还有就是第三个if也可以是elif,亲测效果都一样。当然,你可别错过这条!!!!!!!!!!!!!!!!!!!!!!!!后面看其他代码时突然想到一个问题,就是else无意义,于是去掉了,然后发现运行结果一致,噗笑哭,所以图片里面的else没意义,完全可以去掉,不过如果想在完成游戏(无论是猜对还是猜错)都有over输出,就请一定要注意缩进。!!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog