鱼C论坛

 找回密码
 立即注册
查看: 1902|回复: 18

[已解决]比较俩个整数的大小,问题是不管while 的条件是true还是false,程序都执行else去了.

[复制链接]
发表于 2020-11-1 15:28:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")

while isinstance(num1,int) and isinstance(num2,int):
    if num1 < num2:
        print("第一个数比第二个小!")

    if num1 > num2:
        print("第一个数比第二个数大!")

    if num1 == num2:
        print("第一个数和第二个数一样大!")

    break
else:
    print("输入错误!")

print("结束!")

最佳答案
2020-11-1 18:36:16
星星飞 发表于 2020-11-1 18:08
我觉得用while好一些。
你觉得怎么做更好啊?


这里推开代码错误不说,先说说 while 循环:

while 是条件循环,而你这里代码中运行完  while 下面的代码块时候就直接执行了 break 退出了循环

所以不管你前面代码怎么样,只要进入 while 循环你的代码就执行一次循环,那么还不如直接用  if-else 语法结构

而且  while-else 的语法结构你应该还没学,while-else 是只有在 while 正常循环结束才会执行 else代码块

对于 你使用 isnstance() 函数,应该没理解好 input 函数的功能,input 函数是接受用户输入,并将其转换为字符串返回

所以 input 函数永远返回的是 str ,而不是 int ,所以你的while 循环条件不可能成立

你可以用 isdigit() ,只要字符串是纯数字,那么就会返回 True,否则返回 False

更改 if 后的以及使用 isdigit函数 的代码:
  1. num1 = input("请输入第一个整数:")
  2. num2 = input("请输入第二个整数:")

  3. if num1.isdigit() and num2.isdigit():
  4.     if num1 < num2:
  5.         print("第一个数比第二个小!")
  6.     if num1 > num2:
  7.         print("第一个数比第二个数大!")
  8.     if num1 == num2:
  9.         print("第一个数和第二个数一样大!")
  10. else:
  11.     print("输入错误!")

  12. print("结束!")
复制代码


想加入循环反复输入可以这样:



  1. while True:
  2.     num1 = input("请输入第一个整数:")
  3.     num2 = input("请输入第二个整数:")
  4.     if num1.isdigit() and num2.isdigit():
  5.         if num1 < num2:
  6.             print("第一个数比第二个小!")
  7.         if num1 > num2:
  8.             print("第一个数比第二个数大!")
  9.         if num1 == num2:
  10.             print("第一个数和第二个数一样大!")
  11.     else:
  12.         print("输入错误,两个输入的数字都应该为整数!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-1 15:29:19 | 显示全部楼层
input()函数的返回值是str型,肯定不是int啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 15:33:47 | 显示全部楼层
num1 = int(input("请输入第一个整数:"))
前面加个int 就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 15:35:39 | 显示全部楼层
只有以break结束循环 才不会走进循环的else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 15:56:54 From FishC Mobile | 显示全部楼层
input函数得到返回的是字符串,要将其转成整形,条件判断语句建议使用 elif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 16:25:26 | 显示全部楼层
lhgzbxhz 发表于 2020-11-1 15:29
input()函数的返回值是str型,肯定不是int啊

如果我num1,num2转换成int()。那么while isinstance(num1,int) and isinstance(num2,int):就没有意义了!
我只要输入整数才有效,输入浮点型和字符串就print("输入错误"),这样我该怎么改啊!
麻烦了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 16:29:00 | 显示全部楼层
as695279622 发表于 2020-11-1 15:33
num1 = int(input("请输入第一个整数:"))
前面加个int 就好了


那按照你说的将num1,num2转换成int()。那么while isinstance(num1,int) and isinstance(num2,int):就没有意义了!(我要的是只有整数才比较大小,其他的就print("输入错误"))
感谢回答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 16:33:00 | 显示全部楼层
大马强 发表于 2020-11-1 15:56
input函数得到返回的是字符串,要将其转成整形,条件判断语句建议使用 elif

你好,我已经转为整型了num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
还是报错   
请输入第一个整数:1.2
Traceback (most recent call last):
  File "E:\python文件文件\第四章的\test5555.py", line 1, in <module>
    num1 = int(input("请输入第一个整数:"))
ValueError: invalid literal for int() with base 10: '1.2'
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 16:43:53 | 显示全部楼层
星星飞 发表于 2020-11-1 16:25
如果我num1,num2转换成int()。那么while isinstance(num1,int) and isinstance(num2,int):就没有意义了 ...

用isdigit()函数,具体用法自行百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 16:45:52 | 显示全部楼层
kogawananari 发表于 2020-11-1 15:35
只有以break结束循环 才不会走进循环的else

我换了
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
if isinstance(num1,int) and isinstance(num2,int):
    if num1 < num2:
        print("第一个数比第二个小!")

    if num1 > num2:
        print("第一个数比第二个数大!")

    if num1 == num2:
        print("第一个数和第二个数一样大!")
else:
    print("输入错误!")

   

print("结束!")

但是一输入浮点型或字符串就会报错:
================== RESTART: E:\python文件文件\第四章的\test5555.py ==================
请输入第一个整数:1
请输入第二个整数:2
第一个数比第二个小!
结束!
>>>
================== RESTART: E:\python文件文件\第四章的\test5555.py ==================
请输入第一个整数:1.2
Traceback (most recent call last):
  File "E:\python文件文件\第四章的\test5555.py", line 1, in <module>
    num1 = int(input("请输入第一个整数:"))
ValueError: invalid literal for int() with base 10: '1.2'
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 17:47:50 From FishC Mobile | 显示全部楼层
你为什么要用while呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 18:08:01 | 显示全部楼层
大马强 发表于 2020-11-1 17:47
你为什么要用while呀?

我觉得用while好一些。
你觉得怎么做更好啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 18:14:35 | 显示全部楼层
星星飞 发表于 2020-11-1 18:08
我觉得用while好一些。
你觉得怎么做更好啊?

用while的目的是什么?判断?
判断的话不是用if比较好吗?我刚开始以为你的while作用是让用户输入道整形才会跳出来,现在看来并不是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 18:26:12 | 显示全部楼层
我刚刚去看了书和试了一下,字符转成整形会报错,比如int('a') 但int('12')就可以,int('1.2')不行,float('1.2')可以,所以要想实现你想要的功能,首先在输入后要判断,但你只能输入整形格式的字符了,所以跟你i想实现功能就很矛盾
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 18:29:03 | 显示全部楼层
大马强 发表于 2020-11-1 18:26
我刚刚去看了书和试了一下,字符转成整形会报错,比如int('a') 但int('12')就可以,int('1.2')不行,float('1 ...

意思就是说你除了输入整形格式的字符串,输入其他都会报错,但是还是有用一个方法可以来实现你的程序的功能,就是利用它的报错,要用到try语句,不知道你学到那里了没有,小甲鱼视频讲过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 18:29:39 | 显示全部楼层
希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 18:36:16 | 显示全部楼层    本楼为最佳答案   
星星飞 发表于 2020-11-1 18:08
我觉得用while好一些。
你觉得怎么做更好啊?


这里推开代码错误不说,先说说 while 循环:

while 是条件循环,而你这里代码中运行完  while 下面的代码块时候就直接执行了 break 退出了循环

所以不管你前面代码怎么样,只要进入 while 循环你的代码就执行一次循环,那么还不如直接用  if-else 语法结构

而且  while-else 的语法结构你应该还没学,while-else 是只有在 while 正常循环结束才会执行 else代码块

对于 你使用 isnstance() 函数,应该没理解好 input 函数的功能,input 函数是接受用户输入,并将其转换为字符串返回

所以 input 函数永远返回的是 str ,而不是 int ,所以你的while 循环条件不可能成立

你可以用 isdigit() ,只要字符串是纯数字,那么就会返回 True,否则返回 False

更改 if 后的以及使用 isdigit函数 的代码:
  1. num1 = input("请输入第一个整数:")
  2. num2 = input("请输入第二个整数:")

  3. if num1.isdigit() and num2.isdigit():
  4.     if num1 < num2:
  5.         print("第一个数比第二个小!")
  6.     if num1 > num2:
  7.         print("第一个数比第二个数大!")
  8.     if num1 == num2:
  9.         print("第一个数和第二个数一样大!")
  10. else:
  11.     print("输入错误!")

  12. print("结束!")
复制代码


想加入循环反复输入可以这样:



  1. while True:
  2.     num1 = input("请输入第一个整数:")
  3.     num2 = input("请输入第二个整数:")
  4.     if num1.isdigit() and num2.isdigit():
  5.         if num1 < num2:
  6.             print("第一个数比第二个小!")
  7.         if num1 > num2:
  8.             print("第一个数比第二个数大!")
  9.         if num1 == num2:
  10.             print("第一个数和第二个数一样大!")
  11.     else:
  12.         print("输入错误,两个输入的数字都应该为整数!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 18:51:35 | 显示全部楼层
Twilight6 发表于 2020-11-1 18:36
这里推开代码错误不说,先说说 while 循环:

while 是条件循环,而你这里代码中运行完  while 下面 ...

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-1 18:52:11 | 显示全部楼层

很有帮助,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表