星星飞 发表于 2020-11-1 15:28:06

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

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("结束!")

lhgzbxhz 发表于 2020-11-1 15:29:19

input()函数的返回值是str型,肯定不是int啊

as695279622 发表于 2020-11-1 15:33:47

num1 = int(input("请输入第一个整数:"))
前面加个int 就好了

kogawananari 发表于 2020-11-1 15:35:39

只有以break结束循环 才不会走进循环的else

大马强 发表于 2020-11-1 15:56:54

input函数得到返回的是字符串,要将其转成整形,条件判断语句建议使用 elif

星星飞 发表于 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("输入错误"),这样我该怎么改啊!
麻烦了!

星星飞 发表于 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("输入错误"))
感谢回答!

星星飞 发表于 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'
>>>

lhgzbxhz 发表于 2020-11-1 16:43:53

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

用isdigit()函数,具体用法自行百度

星星飞 发表于 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'
>>>

大马强 发表于 2020-11-1 17:47:50

你为什么要用while呀?

星星飞 发表于 2020-11-1 18:08:01

大马强 发表于 2020-11-1 17:47
你为什么要用while呀?

我觉得用while好一些。
你觉得怎么做更好啊?

大马强 发表于 2020-11-1 18:14:35

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

用while的目的是什么?判断?
判断的话不是用if比较好吗?我刚开始以为你的while作用是让用户输入道整形才会跳出来,现在看来并不是

大马强 发表于 2020-11-1 18:26:12

我刚刚去看了书和试了一下,字符转成整形会报错,比如int('a') 但int('12')就可以,int('1.2')不行,float('1.2')可以,所以要想实现你想要的功能,首先在输入后要判断,但你只能输入整形格式的字符了,所以跟你i想实现功能就很矛盾

大马强 发表于 2020-11-1 18:29:03

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

意思就是说你除了输入整形格式的字符串,输入其他都会报错,但是还是有用一个方法可以来实现你的程序的功能,就是利用它的报错,要用到try语句,不知道你学到那里了没有,小甲鱼视频讲过

大马强 发表于 2020-11-1 18:29:39

希望对你有帮助{:10_327:}

Twilight6 发表于 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函数 的代码:
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")

if num1.isdigit() and num2.isdigit():
    if num1 < num2:
      print("第一个数比第二个小!")
    if num1 > num2:
      print("第一个数比第二个数大!")
    if num1 == num2:
      print("第一个数和第二个数一样大!")
else:
    print("输入错误!")

print("结束!")

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



while True:
    num1 = input("请输入第一个整数:")
    num2 = input("请输入第二个整数:")
    if num1.isdigit() and num2.isdigit():
      if num1 < num2:
            print("第一个数比第二个小!")
      if num1 > num2:
            print("第一个数比第二个数大!")
      if num1 == num2:
            print("第一个数和第二个数一样大!")
    else:
      print("输入错误,两个输入的数字都应该为整数!")

星星飞 发表于 2020-11-1 18:51:35

Twilight6 发表于 2020-11-1 18:36
这里推开代码错误不说,先说说 while 循环:

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

感谢!

星星飞 发表于 2020-11-1 18:52:11

大马强 发表于 2020-11-1 18:29
希望对你有帮助

很有帮助,谢谢!
页: [1]
查看完整版本: 比较俩个整数的大小,问题是不管while 的条件是true还是false,程序都执行else去了.