S.archagnelice 发表于 2020-3-21 16:09:57

一个零基础python入门学习课堂练习的求助

新人刚学python,在做《零基础python入门》第四章4.2课堂小练习的时候,我想把那个填分数的小程序改成错了可以继续填的样子。但是试了很多方法都没成功。麻烦各位帮忙看下怎么改才行。谢谢。
原程序是:
#P4.1.py
score = int(input('输入分数:'))
if 100 >= score >= 90:
        print('A')
elif 90 > score >= 80:
        print('B')
elif 80 > score >= 60:
        print('C')
elif 60 > score >= 0:
        print('D')
else:
        print('输入错误。')

我试了一些方法后,最后改完至少能跑起来不死机的是:

for guess in range(0,100):
        guess = int(input('输入你的分数:'))
        score = int(guess)

while True:
                if score != guess:
                        score = input('输入错误,继续:')
                else:

                        if 100 >= score >= 90:
                                print('A')
                        elif 90 > score >= 80:
                                print('B')
                        elif 80 > score >= 60:
                                print('C')
                        elif 60 > score >= 0:
                                print('D')
               
print('over')

但是这个运行后只会一直提示输入分数。请教有没有什么办法让它在输入0-100之外的数字后,再返回继续输入一直到正确的范围呢?多谢。

Hoiste 发表于 2020-3-21 16:16:26

本帖最后由 Hoiste 于 2020-3-21 16:24 编辑

一、循环内要再次把score转成int类型,否则字符串类型永远无法等于整形数字
二、没有设置break条件,所以会陷入死循环。
三、有一个无意义的for循环和无意义的变量名

参考代码
score = int(input('输入你的分数:'))

while True:
    if score in range(0,101):#0到100之间的整形列表,不包含101
      if 100 >= score >= 90:
            print('A')
      elif 90 >= score >= 80:
            print('B')
      elif 80 >= score >= 60:
            print('C')
      elif 60 >= score >= 0:
            print('D')
      break#没有这个会一直死循环的
    else:
      score = int(input('输入有误,请重新输入:'))

xinhua202002 发表于 2020-3-21 16:21:23

while True:
    guess = int(input('输入你的分数:'))
    if guess < 0 or guess > 100:
      score = print('输入错误,重新输入')
    elif 100 >= guess >= 90:
            print('A')
    elif 90 > guess >= 80:
            print('B')
    elif 80 > guess >= 60:
            print('C')
    elif 60 > guess >= 0:
         print('D')

S.archagnelice 发表于 2020-3-21 16:23:23

xinhua202002 发表于 2020-3-21 16:21


多谢多谢,原来是这么做啊,我试了那个大于或者小于,但是我用的是 if 100 < guess < 0 ,提示错误,然后就没再用它。现在知道了,谢谢{:5_109:}

S.archagnelice 发表于 2020-3-21 16:25:22

Hoiste 发表于 2020-3-21 16:16
循环内要再次把score转成int类型,否则字符串类型永远无法等于整形数字,此外没有设置break条件,所以会陷 ...

嗯,明白了,多谢。我一开始加了个break,然后也是一直让输入分数。后边我又把break去掉了,把range挪到后边,结果就是直接卡死了。

S.archagnelice 发表于 2020-3-21 16:31:58

Hoiste 发表于 2020-3-21 16:16
一、循环内要再次把score转成int类型,否则字符串类型永远无法等于整形数字
二、没有设置break条件,所以 ...

刚才没刷出这个代码,把最佳给那位朋友了。现在才看到代码,你这个更完美。没办法,没法选最佳了,手动最佳吧。这个才是我想要的效果。多谢多谢。学习了。{:5_109:}

sunrise085 发表于 2020-3-21 16:36:10

你打算完成什么功能?
前三行的 for循环导致你需要输入100次(不管你输入的是什么值)
score每次输入都需要转成int,否则不能与int进行比较

你是打算输入一个值,然后输出等级,若输入超出范围则重新输入?
score = int(input('输入你的分数:'))
while True:
    if score>100 or score<0:
      score = int(input('输入错误,继续:'))
      continue
    if 100 >= score >= 90:
      print('A')
    elif 90 > score >= 80:
      print('B')
    elif 80 > score >= 60:
      print('C')
    elif 60 > score >= 0:
      print('D')
    break
               
print('over')

S.archagnelice 发表于 2020-3-21 16:45:59

sunrise085 发表于 2020-3-21 16:36
你打算完成什么功能?
前三行的 for循环导致你需要输入100次(不管你输入的是什么值)
score每次输入都需 ...

多谢各位热心帮忙,你这个也很棒,又学会一个continue,多谢多谢。就是这效果
页: [1]
查看完整版本: 一个零基础python入门学习课堂练习的求助