鱼C论坛

 找回密码
 立即注册
查看: 1925|回复: 7

[已解决]一个零基础python入门学习课堂练习的求助

[复制链接]
发表于 2020-3-21 16:09:57 | 显示全部楼层 |阅读模式

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

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

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


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

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

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

  8.                         if 100 >= score >= 90:
  9.                                 print('A')
  10.                         elif 90 > score >= 80:
  11.                                 print('B')
  12.                         elif 80 > score >= 60:
  13.                                 print('C')
  14.                         elif 60 > score >= 0:
  15.                                 print('D')
  16.                
  17. print('over')
复制代码


但是这个运行后只会一直提示输入分数。请教有没有什么办法让它在输入0-100之外的数字后,再返回继续输入一直到正确的范围呢?多谢。
最佳答案
2020-3-21 16:21:23
  1. while True:
  2.     guess = int(input('输入你的分数:'))
  3.     if guess < 0 or guess > 100:
  4.         score = print('输入错误,重新输入')
  5.     elif 100 >= guess >= 90:
  6.             print('A')
  7.     elif 90 > guess >= 80:
  8.             print('B')
  9.     elif 80 > guess >= 60:
  10.             print('C')
  11.     elif 60 > guess >= 0:
  12.            print('D')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 16:16:26 | 显示全部楼层
本帖最后由 Hoiste 于 2020-3-21 16:24 编辑

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

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

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

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-21 16:21:23 | 显示全部楼层    本楼为最佳答案   
  1. while True:
  2.     guess = int(input('输入你的分数:'))
  3.     if guess < 0 or guess > 100:
  4.         score = print('输入错误,重新输入')
  5.     elif 100 >= guess >= 90:
  6.             print('A')
  7.     elif 90 > guess >= 80:
  8.             print('B')
  9.     elif 80 > guess >= 60:
  10.             print('C')
  11.     elif 60 > guess >= 0:
  12.            print('D')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-21 16:23:23 | 显示全部楼层

多谢多谢,原来是这么做啊,我试了那个大于或者小于,但是我用的是 if 100 < guess < 0 ,提示错误,然后就没再用它。现在知道了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯,明白了,多谢。我一开始加了个break,然后也是一直让输入分数。后边我又把break去掉了,把range挪到后边,结果就是直接卡死了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

刚才没刷出这个代码,把最佳给那位朋友了。现在才看到代码,你这个更完美。没办法,没法选最佳了,手动最佳吧。这个才是我想要的效果。多谢多谢。学习了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 16:36:10 | 显示全部楼层
你打算完成什么功能?
前三行的 for循环导致你需要输入100次(不管你输入的是什么值)
score每次输入都需要转成int,否则不能与int进行比较

你是打算输入一个值,然后输出等级,若输入超出范围则重新输入?
  1. score = int(input('输入你的分数:'))
  2. while True:
  3.     if score>100 or score<0:
  4.         score = int(input('输入错误,继续:'))
  5.         continue
  6.     if 100 >= score >= 90:
  7.         print('A')
  8.     elif 90 > score >= 80:
  9.         print('B')
  10.     elif 80 > score >= 60:
  11.         print('C')
  12.     elif 60 > score >= 0:
  13.         print('D')
  14.     break
  15.                
  16. print('over')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

多谢各位热心帮忙,你这个也很棒,又学会一个continue,多谢多谢。就是这效果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 12:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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