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

weixin_44074810
宗文博 https://blog.csdn.net/weixin_44074810/article/details/88694460 这个是链接
6 个月之前 回复
weixin_44074810
宗文博 兄弟你可以加我QQ:1691598339我给你解释一下或者我一会把你的问题写一个博客放出来 你可以看一下 因为我不知道回复你消息怎么添加图片
6 个月之前 回复

while guess!=secret and tries<8,你这循环的条件就是不够8次,就算猜对了也会再次循环的啊

Python_Leaner
Python_Leaner 上一条回答没理解你的意思,你看啊,while循环是当满足条件时循环while之后的语句对吧,意思就是当猜的数字不等于随机数and变量tires(猜的次数)<8这两个条件都满足时,退出while循环,但是当他猜的数字=随机数字后,已经不满足while语句了,但仍没有退出循环,所以是你没理解意思啦。
6 个月之前 回复
Python_Leaner
Python_Leaner 兄弟,python会从0.1.2.3.4.5.6.7这样来运行8次,所以次、是足够的
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
回答一下 在Python 猜数游戏中 while 循环里 guess=int(input(""))和 if int(guess) 使用有什么区别呢 这一问题中 Python_Leaner的问题
在这里首先先感谢 Python_Leaner 给指出的问题 我这边改正之后程序运行没问题了 ,然后再来回复一下他同时抛出的问题 先把他的问题摆出来,我就直接截图了: 首先我先吧代码重新打了一遍 但是不知道为什么 他的代码在我这边会报错 (会不会是以内我用的是IDLE的原因)所以我就把代码简单改了一下 : from random import randint secret = randint(1...
猜数游戏guess
很简单的猜数游戏,希望大家喜欢guess.java
guess= +guess什么意思??
function guessNumber(number) rn rn guess = prompt( "Guess a number between 1 and 100");rn rn guess = [color=#FF0000]+[/color]guess;rnrn rn if (guess===number) rn return console.log("You got it! The number was " + number);rn rn guessNumber(number);rnrnrnrn guessNumber(5) ;rnrnguess= +guess什么意思??
(int) 和 (int*)有什么区别?
(int) 和 (int*)有什么区别?rn我在书中看到calloc(5,sizeof(int*)改成calloc(5,sizeof(int)程序结果一样,是不是可以认为两都相同?
guess number
猜数游戏 编程由计算机生成一个1 100之间的整数请用户猜 若猜对则结束游戏 并输出用户猜测次数(输出格式:“Right [猜测次数] time s ”);若猜错则给出提示 若用户所猜数偏大 则输出“Big” 否则输出“Small” 一次游戏最多可以猜10次 若经过10次仍未猜中的话 输出“over” 并结束游戏 ">猜数游戏 编程由计算机生成一个1 100之间的整数请用户猜 若猜对则结束游戏 并输出用户猜测次数(输出格式:“Right [猜测次数] time s ”);若猜错则给出提示 若用户所猜数偏大 则输出“Big” 否则输出“Small” 一 [更多]
Guess Fist
适合C#初学者,学习简单编程--入门级别!
趣味程序guess
guess,趣味程序,猜数字,简单的代码说明
Guess number
猜四位数字,然后看看每次成功后一共用了多少次数
猜数字~Guess a number(第四天)
这个程序要求用户猜测数字,它会一直问用户猜测数字,直到他们正确猜测为止。一旦他们正确地猜到了,它就会告诉他们多少次尝试过。 answer = 10 attempts= 0 userentry=&amp;amp;quot;&amp;amp;quot; #a loop that repeats while the users guess is not the same as the answer # 当用户猜测与答案不同时重复的循环 whil...
Guess (浮点数,高精度)
点击打开链接 题意:有 n 位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交的越早,预得分越大)。 接下来 是系统评测。如果某道题未通过测试,则改题的实际得分为0分,否则得分等于预得分。得分相同的选手,ID小的排在前面。 问是否能给出所有3n个得分以及最后的实际名次。如果可能,输出最后一名的最高可能得分。每个预得分均为小于10...
1612 - Guess(贪心)
该题的思路很好想,就是尽量取大一些的成绩为后面的人留出更大的 “空间” 。   细节也很好想,这里不再赘述,值得一提的是 : 该题存在精度问题 , 导致我一开始一直WA。 由于输入和输出只保留两位小数,所以我们不妨将浮点数变成小数,这里要用到round函数,将不需要的小数位四舍五入到整数 。 #include using namespace std; const int maxn = 1638
GUESS FOIL picture
GUESS FOIL picture 图片文件 图片参考文件 logo酷到毙
Guess a Function
We define thatnng(x) = x^(x/2)nnh1(x) = x / m1 * m1 + ( x + s1) % m1nnh2(x) = x / m2 * m2 + ( x + s2) % m2nnf(x) = g( h2( g( h1( g( x ) ) ) ) )nnAll above are integer arithmetic, and '^' is binary xor, for example, 8/3 = 2 , 5 ^ 12 = 9. m1, m2, s1, s2 are 4 positive integers less than 345678, and fixed in all cases. But they are not explicitly given, you should guess them from the sample. (0.3m1 < s1< m1, 0.3m2 < s2
LA4255 Guess (拓扑排序)
#include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=15; int c[maxn]; int G[maxn][maxn]; vector topo; int n; bool dfs(int u)
codeforces Guess a number!
Description A TV show called “Guess a number!” is gathering popularity. The whole Berland, the old and the young, are watching the show.The rules are simple. The host thinks of an integer y and the pa
Number Guess 0.1.py
Number Guess 0.1.py;
guess a number
guess a number java
guess random number
this is a simple test.you can know how to interactive,and how to generate a random number.
UvaLive 4255 Guess(拓扑排序)
题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2256 思路: 1.对于前缀和sum[i]、sum[j]:若i到j的和为负数,则连边(i-1)--->j(代表sum[j]-sum[i-1](i-1)(代表sum[j]-sum[
UVa 1612:Guess(贪心)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=845&page=show_problem&problem=4487 题意:有n(n≤16384)(n \le 16384)位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时
user guess是什么意思?
今天看了一本英文的C++书,上面有一段话中的user guess不明白是何意思,请帮忙翻译一下(got_it为if(got_it)出现的)rn如这两段话rngot_it is always set to true in this example regardless of what the user guessesrnrnwhile the user want to guess a sequencern如何翻译呢?
int (*f) (int x)与 int *f (int x);有什么区别?
第一个f代表着一个函数指针,rn第二个呢?一个函数?还是他就是错误的?
安卓开发:Guess游戏
package com.example.guess; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; imp
Guess UVA - 1423(拓扑排序)
题目链接:https://vjudge.net/contest/180830#problem/F 题意:给定一个长度为(n + 1) / 2的串一次表示sum(i,j)的正负,1 思路:对区间和sum进行拓扑排序。设sum[x]为1~x的和,若sum(i,j) > 0则表示sum[j] - sum[i - 1] > 0即sum[j] > sum[i -1];若sum(i,j) 代码如下:
最新的config guess
MP4v2源码编译的时候,输入./configure 通常会出现config.guess版本过期,因此上传最新的config.guess,供大家使用
Number Guess 0.2.py
Number Guess 0.2.py;
int和Integer有什么区别
int是我们常说的整形数字,是java的8个原始数据类型之一。java语言虽然号称一切都是对象,但原始数据类型是例外的。 Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、int和字符之间的转换等。在java5中,引入了自动装箱和自动拆箱功能,java可以根据上下文,自动进行转换,极大地简化了相关编程。 关于Integer的值缓存,这涉及到...
int 和 Integer 有什么区别?
Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。 1、int 的包装类就是Integer, 2、Integer变量必须实例化之后才能使用,而int变量不需要 ...
int 和Integer有什么区别
Java是一个纯面向对象的语言,但是为了编程的方便还是引入了基本数据类型。在Java中共有8种基本数据类型。但为了能够将这些基本数据类型当成对象操作,Java就引入了包装类型(Wrapper Class), int的包装类型就是Integer 8种基本数据类型:byte short int long float double char boolean 对应的包装类型 Byte Sho...
int和Integer有什么区别?
这个问题看起来比较简单,可以问的问题可多可少。 一般常见的考察范围是java的基础数据类型和包装类。然后可以延伸到自动拆箱和自动装箱以及包装类中的缓存和缓存范围。当然还可以延伸到设计模式–享元模式等。 首先比较典型的回答: Integer是int的包装类,int是基础数据类型 Integer变量必须实例化后才能使用,int变量不需要 Integer是对象的引用,指向new出Integer对...
int和integer有什么区别
111
int 和 long 有什么区别?
在Windows 2000/XP...平台上, 使用Visual C++ 6/7编译器这样的环境中;rnrn我的朋友告诉我:他们是以上环境中是完全相同的!但是又有人说他们是不同的?rnrn我想知道:rn在以前环境中他们是不是相同的? (16bit)rn在现在环境中他们是不是真的相同的? (32bit)rn在将来环境中他们是不是还会相同的? (64bit)rnrn
int与Integer有什么区别?
int与Integer有什么区别?怎样把int f = 100;的f转变成String类型的变量?
long和int有什么区别?
long和int有什么区别?
int和Integer有什么区别?
无意中又看到了这个问题,今天总结一下     一、  int就是我们常说的java八大(primitive types : blooean、 byte 、 short 、 char 、int 、 float 、 double 、 long)原始数据类型之一。java虽然号称一切皆对象但是基本数据类型是例外。 【八种基本数据类型的包装类】 byte ——Byte short ——Short ...
int 和 Integer 有什么区别
  (1)int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换  (2)所以最基本的一点区别是:Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。...
uva 1423 - Guess(拓扑排序)
题目链接:uva 1423 - Guess 以前缀和为节点,这样有N+1个节点,S(i,j) = 节点j-节点i-1,所以如果S(i,j)为负,表示节点j>节点i,否则相反。 #include #include #include #include #include using namespace std; const int maxn = 105; int N,
UVA 1423 Guess 【拓扑排序】
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=36239题意:给你序列的区间和的正负,要求构造一组序列满足条件。 转换为前缀和,进行拓扑序列。代码:#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #incl
UVA1612 Guess(贪心+精度)
description A competition was just over. It had 3 problems and n players. Each player had an ID number from 1 to n. The final rank was decided by the total score of the 3 problems. The higher the tota
模拟试——guess
题目大意: 题解: 因为答案要么在-10000~10000中,所以我们建一个区间[l,r],根据每一个回答去修改区间,最后输出l,如果修改过程中l>r就不用做修改了,直接输出Impossible。 如果是N,就把前面的当反语看,注意 “<”号 跟“>”号,反语是“>=”,“<=”,而不仅仅是“>”,“<”。 而<=,>=反语就仅仅只是“<”,“>”了。时间复杂度:O(N)var
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制