鱼C论坛

 找回密码
 立即注册
查看: 4151|回复: 17

这题帮我看一下,是题目有问题,还是要怎么解决?

[复制链接]
发表于 2021-6-2 22:58:39 | 显示全部楼层 |阅读模式

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

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

x
#注释:以下为"随机生成一个1-20之间的正整数,用户猜一个数(输入)"的代码,请不要删除<1>和<2>以外的任何代码。
import random
t = random.randint(1,20)
#注释:删除<1>,在<1>处写上正确的代码
for i in range<1>:
    print('这是第' + str(i) + '次猜数字')
    a = input('请输入数字:')
    if a.isdigit():
        a = int(a)
        #注释:删除<2>,在<2>处写上正确的代码
        if <2>:
            print("请输入1—20之间的数")
            continue
        if a < t:
            print('您输入的数字太小了,请重新输入:')
        elif a > t:
            print('您输入的数字太大了,请重新输入:')
        elif a == t:
            print('恭喜您猜对了')
            break
    elif a == 'q':
        print('退出游戏!')
        break
    else:
        print('输入的内容必须为正整数,请重新输入:')



题目要求

8计算机随机生成一个1-20之间的整数,用户猜一个数(输入),程序反馈“大了”还是“小了”;用户重新输入一个数,程序循环反馈猜数情况,直到用户猜中,程序反馈“猜中了”,猜数结束。
请不要删除<1>和<2>以外的任何代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-2 23:00:48 | 显示全部楼层
我觉得使用While,但是他为什么要用for?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 07:41:16 From FishC Mobile | 显示全部楼层
新的开始123 发表于 2021-6-2 23:00
我觉得使用While,但是他为什么要用for?

for和while没太大的区别,一般情况下用哪个都可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 14:55:43 | 显示全部楼层
  1. import random
  2. t = random.randint(1,20)
  3. #注释:删除<1>,在<1>处写上正确的代码
  4. # 这里是猜数据的次数,答案不唯一,因为指定结果为1-20之间
  5. # 所以一般状态设置 range(1,21)就足够了,但是考虑可能输入重复
  6. # 再加上有可能测试不在 1-20之间的数据,所以设置一个较大数值
  7. # 题目没有要求猜测的次数,所以直到猜中 break
  8. # 数值设置较大不影响结果

  9. for i in range(1,1000):
  10.     print('这是第' + str(i) + '次猜数字')
  11.     a = input('请输入数字:')
  12.     if a.isdigit():
  13.         a = int(a)
  14.         #注释:删除<2>,在<2>处写上正确的代码
  15.         # 这里是判断输入的数字是否在 1-20之间
  16.         # 答案不唯一,因为题目明确是正整数,所以我采用的是这种方式
  17.         # 当然可以用其他判断方式,例如:
  18.         # if a < 1 or a > 20:
  19.         # 等等
  20.         
  21.         if a not in range(1,21):
  22.             print("请输入1—20之间的数")
  23.             continue
  24.         if a < t:
  25.             print('您输入的数字太小了,请重新输入:')
  26.         elif a > t:
  27.             print('您输入的数字太大了,请重新输入:')
  28.         elif a == t:
  29.             print('恭喜您猜对了')
  30.             break
  31.     elif a == 'q':
  32.         print('退出游戏!')
  33.         break
  34.     else:
  35.         print('输入的内容必须为正整数,请重新输入:')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 15:05:52 | 显示全部楼层
新的开始123 发表于 2021-6-2 23:00
我觉得使用While,但是他为什么要用for?

你感觉使用 while 是正确的第一感应。
虽说 while 和 for 是可以通过一些手段相互转化,
但是 我们通常会很明确知道什么时候使用 while 什么时候使用 for
一般我们认为,在有明确循环体(如列表元组)、有明确循环次数(如只能猜5次)的循环应当首选 for
没有明确循环体和循环次数,但是有明确的循环条件(如输入q退出,直到猜中退出)的循环应当首选 while
不过本题要求只能改特定部位,所以也无所谓了。只需将循环次数设置较大就可以了
毕竟要求数字在 1-20 之间的正整数,最多20次,也算是有个次数要求
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 16:41:08 | 显示全部楼层
wp231957 发表于 2021-6-3 07:41
for和while没太大的区别,一般情况下用哪个都可以

那么那两个填什么,我们老师说不会,他说题目有问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 16:44:22 | 显示全部楼层

这跟次数没关系吧,如果没猜对的话,他就是死循环,但是死循环用for 怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-6-3 17:22:14 | 显示全部楼层
新的开始123 发表于 2021-6-3 16:44
这跟次数没关系吧,如果没猜对的话,他就是死循环,但是死循环用for 怎么写


你较这个真没什么意义,事实上,一般情况下不存在死循环,因为死循环基本就代表错误。
即使是 while True 也是会有 break 的
可是你问到了怎样用for写死循环那我也不妨简单讲一下,例如 将range内的数值设置无限大,
比如这个值等于10000**10000,我保证这个数据到死也循环不完,或者用列表也可以,因为列表是可变化的可迭代对象,你可以
  1. data = [0, 1]
  2. for i in data:
  3.     print(i)
  4.     data.append(2 + i)
复制代码

相对于本题,既然要求输入数据在 1-20 的正整数,当然只有20个,每个数据猜一遍也猜出来了,所以即使想要多测试几组数据,设置大一点的数据也足够了,钻了牛角尖只会陷入死胡同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 17:25:37 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-6-3 17:27 编辑
新的开始123 发表于 2021-6-3 16:41
那么那两个填什么,我们老师说不会,他说题目有问题。


如果你们老师认为错误,那这个错误只在教学理念上,你完全可以把我的解释跟老师说。当然题目确实也不够严谨,如果严谨一些就不该用 continue
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 19:05:52 | 显示全部楼层
qq1151985918 发表于 2021-6-3 17:25
如果你们老师认为错误,那这个错误只在教学理念上,你完全可以把我的解释跟老师说。当然题目确实也不够 ...

所以这两个空格应该怎么填?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 19:09:31 | 显示全部楼层
qq1151985918 发表于 2021-6-3 15:05
你感觉使用 while 是正确的第一感应。
虽说 while 和 for 是可以通过一些手段相互转化,
但是 我们通常 ...

所以这两个空应该怎么填,使他在没有猜对的情况下,一直循环下去。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 19:17:48 From FishC Mobile | 显示全部楼层
新的开始123 发表于 2021-6-3 19:09
所以这两个空应该怎么填,使他在没有猜对的情况下,一直循环下去。

一百年前就贴了代码了看不到吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 17:48:20 | 显示全部楼层
qq1151985918 发表于 2021-6-3 19:17
一百年前就贴了代码了看不到吗?

主要按照你的方式还是没有得分。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 17:48:54 | 显示全部楼层
qq1151985918 发表于 2021-6-3 19:17
一百年前就贴了代码了看不到吗?

主要按照你的方式还是没有得分。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 17:49:48 | 显示全部楼层
qq1151985918 发表于 2021-6-3 19:17
一百年前就贴了代码了看不到吗?

主要按照你的方式还是没有得分。他显示没有找到主要的关键词。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 18:33:02 From FishC Mobile | 显示全部楼层
新的开始123 发表于 2021-6-4 17:49
主要按照你的方式还是没有得分。他显示没有找到主要的关键词。

如果是死读书死记硬背照搬照抄那是没有意义的。我全部都给你写了注释,已经告诉你了答案不唯一。即使是相同的题目,不同人也会写出不一样的代码,否则岂不是一模一样的结果了么。只要你自己知道是否正确就好了。既然你有老师,不妨去问一问,把我给你的代码和注释给你的老师看。你说的他显示没有发现关键字,应该是电脑阅卷吧?不要相信电脑阅卷,电脑只会对比答案,不会写代码。否则还要什么程序员。你要相信你自己,相信你的老师。多去跟你的老师问问吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-8 20:06:28 | 显示全部楼层
qq1151985918 发表于 2021-6-4 18:33
如果是死读书死记硬背照搬照抄那是没有意义的。我全部都给你写了注释,已经告诉你了答案不唯一。即使是相 ...

我们的计算机考试,就是电脑阅卷啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-8 20:10:36 | 显示全部楼层
qq1151985918 发表于 2021-6-4 18:33
如果是死读书死记硬背照搬照抄那是没有意义的。我全部都给你写了注释,已经告诉你了答案不唯一。即使是相 ...

没有找到关键词就不给分了,
如果让我写的话,我肯定使用for
今天刚好抽到这一道题,我按照你的方法填写,然后八分还是全扣掉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 06:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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