鱼C论坛

 找回密码
 立即注册
查看: 1138|回复: 8

[已解决]关于while循环

[复制链接]
发表于 2018-4-24 09:45:16 | 显示全部楼层 |阅读模式

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

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

x
temp = input('请输入您的分数:')
while not isinstance(temp,int):   
    temp = input('抱歉,您的输入有误,请重新输入一个0到100之间的数字:')
score = int(temp)
if score <= 100 and score >= 90:
    print('A')
else:
    if score < 90 and score >= 80:
        print('B')
    else:
        if score < 80 and score >= 60:
            print('C')
        else:
            print('D')

如上,运行之后如果输入abcd,是可以返回第二个input,但是之后输入数字,却运行不到下面的if循环,我这个架构跟小甲鱼005课后题的架构差不多,虽然他用的是isdigit函数,但是这题我觉得用isinstance的逻辑也没问题,为什么他的能跳到下一个if循环,我的就不行
下面附上小甲鱼的参考答案:

temp = input('请输入一个年份:')
while not temp.isdigit():
    temp = input("抱歉,您的输入有误,请输入一个整数:")

year = int(temp)
if year/400 == int(year/400):
    print(temp + ' 是闰年!')
else:
    if (year/4 == int(year/4)) and (year/100 != int(year/100)):
        print(temp + ' 是闰年!')
    else:
        print(temp + ' 不是闰年!')
最佳答案
2018-4-24 11:20:22
首先指出你代码的不足:score = int(temp)        # 这句没必要,已经判断过了int类型
而且isinstance判断也不对,input函数返回str,永远为False。
请参考我的标准代码。
=========================================
int score = int(input("Enter your score here "))

if score <0 or score >100:
        print("Please enter a legal score !")
if score >=90:
        print('A')
elif score >=80:
        print('B')
elif score >=60:
        print('C')
else:
        print('D')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-24 09:55:28 | 显示全部楼层
你这个永远输入的都是字符串,所以是个死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 09:59:12 | 显示全部楼层
input函数返回的是str,你用isinstance将它和int比,永远是false
正确的做法是用isdigit函数来判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-24 10:17:09 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
int main()
{
        printf("请输入您的分数:\n");
        int i;
        scanf_s("%d", &i);
        if (i <=100&&i >=0)
        {
                if (90 <= i && 100 >= i)
                {
                        printf("A\n");
                }
                else if (90 >= i && 80 <= i)
                {
                        printf("'B'\n");
                }
                else if (80 >= i && 60 <= i)
                {
                        printf("C\n");
                }
                else
                {
                        printf("D\n");
                }
        }
        else
        {
                printf("输入数据有误!\n");
        }
        system("pause");
        return 0;
}

是不是else if的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 11:20:22 | 显示全部楼层    本楼为最佳答案   
首先指出你代码的不足:score = int(temp)        # 这句没必要,已经判断过了int类型
而且isinstance判断也不对,input函数返回str,永远为False。
请参考我的标准代码。
=========================================
int score = int(input("Enter your score here "))

if score <0 or score >100:
        print("Please enter a legal score !")
if score >=90:
        print('A')
elif score >=80:
        print('B')
elif score >=60:
        print('C')
else:
        print('D')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-26 17:19:57 | 显示全部楼层
ABC23 发表于 2018-4-24 11:20
首先指出你代码的不足:score = int(temp)        # 这句没必要,已经判断过了int类型
而且isinstance判断也不对 ...

感谢指点,现在明白了,意思是即使我输入的是数字 input得到的依然是字符串类型的数字.

我按照你的程序跑了下,如果输入字母的话,程序会崩溃,我之前程序的功能之一,是希望用户输入任何类型,如果不是数字的话,给予提示.

能不能修改下,以实现这个功能呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-26 17:44:53 | 显示全部楼层
livermore1877 发表于 2018-4-26 17:19
感谢指点,现在明白了,意思是即使我输入的是数字 input得到的依然是字符串类型的数字.

我按照你的程序 ...

用string.isdigit()方法判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-26 17:46:03 | 显示全部楼层
livermore1877 发表于 2018-4-26 17:19
感谢指点,现在明白了,意思是即使我输入的是数字 input得到的依然是字符串类型的数字.

我按照你的程序 ...

用_str.isdigit()方法进行判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-26 17:50:11 | 显示全部楼层
ABC23 发表于 2018-4-26 17:46
用_str.isdigit()方法进行判断

再次感谢,小白学习好艰难啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 07:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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