鱼C论坛

 找回密码
 立即注册
查看: 1860|回复: 14

[已解决]零基础入门第一版004课后作业

[复制链接]
发表于 2019-5-11 21:07:39 | 显示全部楼层 |阅读模式

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

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

x
真的是一只笨小白一枚!作业有很多疑问,小甲鱼也没有讲清楚,如果问题太基础,请各位优秀的大神见谅! 多谢大家!!!

可以帮我看下下面哪里出问题以及为什么吗?主要是想知道为什么!
另外参考答案里为什么小甲鱼会在开头让guess等于一个零呢?

这是我按照自己的逻辑写的:

import random
secret = random.randint(1,10)
temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
guess = int(temp)
while guess:
    if guess == secret:
        print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
        print("哼,猜中了也没有奖励!")
        break
    else:
        if guess > secret:
            print("诶呀,大了!请重新输入吧:")
        else:
            print("诶呀,小了!请重新输入吧:")
print("游戏结束,不玩了")


下面是小甲鱼给的参考答案:

import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
# 这里先给guess赋值(赋一个绝对不等于secret的值)
guess = 0
# print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行
# 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (guess != secret) and (times > 0):
    temp = input()
    guess = int(temp)
    times = times - 1 # 用户每输入一次,可用机会就-1
    if guess == secret:
        print("我草,你是小甲鱼心里的蛔虫吗?!")
        print("哼,猜中了也没有奖励!")
    else:
        if guess > secret:
            print("哥,大了大了~~~")
        else:
            print("嘿,小了,小了~~~")
        if times > 0:
            print("再试一次吧:", end=" ")
        else:
            print("机会用光咯T_T")
print("游戏结束,不玩啦^_^")

最佳答案
2019-5-11 21:16:23
本帖最后由 jackz007 于 2019-5-11 21:20 编辑
  1. import random
  2. secret = random . randint(1,10)
  3. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
  4. guess = int(temp)
  5. while guess:                      # 没有安排重新输入和更正 guess 的机会,guess 不等于 secret 的时候,会进入无限循环。
  6.     if guess == secret:
  7.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  8.         print("哼,猜中了也没有奖励!")
  9.         break
  10.     else:
  11.         if guess > secret:
  12.             print("诶呀,大了!请重新输入吧。")
  13.         else:
  14.             print("诶呀,小了!请重新输入吧。")
  15. print("游戏结束,不玩了")
复制代码

      这么改才对:
  1. import random
  2. secret = random . randint(1,10)
  3. while True:
  4.     guess = int(input("你猜猜小甲鱼现在心里想的是什么数字?"))
  5.     if guess == secret:
  6.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  7.         print("哼,猜中了也没有奖励!")
  8.         break
  9.     else:
  10.         if guess > secret:
  11.             print("诶呀,大了!请重新输入吧:")
  12.         else:
  13.             print("诶呀,小了!请重新输入吧:")
  14. print("游戏结束,不玩了")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-11 23:15:19 | 显示全部楼层
jackz007 发表于 2019-5-11 22:51
按你修改后的代码,循环外的第 1 次输入没有任何用处,根本就没必要存在,循环里的 input() 没有 ...

啊哈!懂了!input() 没有提示字符,程序莫名其妙停了,有道理!谢谢醍醐灌顶的指出!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 22:52:43 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-11 22:51:40 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-11 23:01 编辑
一只很笨的猫 发表于 2019-5-11 22:30
经过多次尝试,我明白你的改动了,请问我之前尝试的这样为什么会报错呢:
Traceback (most recent call  ...

        按你修改后的代码,循环外的第 1 次输入没有任何用处,根本就没必要存在,循环里的 input() 没有提示字符,程序莫名其妙地停在那里,会让用户不知所措。
  1. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")     # 废码,没有必要存在
  2. guess = int(temp)                                   # 废码,没有必要存在
  3. while True:
  4.     guess=int(input())                              # 只有这个输入才会起作用
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 22:35:46 | 显示全部楼层
一只很笨的猫 发表于 2019-5-11 22:30
经过多次尝试,我明白你的改动了,请问我之前尝试的这样为什么会报错呢:
Traceback (most recent call  ...

看报错,你按下回车符,int('\n')出错,应该输入数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 22:35:27 From FishC Mobile | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-11 22:30:00 | 显示全部楼层

经过多次尝试,我明白你的改动了,请问我之前尝试的这样为什么会报错呢:
Traceback (most recent call last):
  File "/Users/minami/Desktop/小甲鱼python学习/004/004作业练习.py", line 7, in <module>
    guess=int(input())
ValueError: invalid literal for int() with base 10: ''


下面是我的尝试:
  1. import random
  2. secret = random.randint(1,10)
  3. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
  4. guess = int(temp)
  5. while True:
  6.     guess=int(input())
  7.     if guess == secret:
  8.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  9.         print("哼,猜中了也没有奖励!")
  10.         break
  11.     else:
  12.         if guess > secret:
  13.             print("诶呀,大了!请重新输入吧:")
  14.         else:
  15.             print("诶呀,小了!请重新输入吧:")
  16. print("游戏结束,不玩了")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 22:24:43 | 显示全部楼层
风丶少 发表于 2019-5-11 22:02
1. 如果直接 guess=input("诶呀,大了!请重新输入吧:"),guess就是字符串,secret是数字,所以guess永 ...

前两个彻底明白了!
第三个,我按照你的改了后,第一次回车没反应,再按一次回车就报错了

  1. import random
  2. secret = random.randint(1,10)
  3. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
  4. guess = int(temp)
  5. while guess:
  6.     guess=int(input())
  7.     if guess == secret:
  8.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  9.         print("哼,猜中了也没有奖励!")
  10.         break
  11.     else:
  12.         if guess > secret:
  13.             print("诶呀,大了!请重新输入吧:")
  14.         else:
  15.             print("诶呀,小了!请重新输入吧:")
  16. print("游戏结束,不玩了")
复制代码


  1. 你猜猜小甲鱼现在心里想的是什么数字?6

  2. Traceback (most recent call last):
  3.   File "/Users/minami/Desktop/小甲鱼python学习/004/004作业练习.py", line 7, in <module>
  4.     guess=int(input())
  5. ValueError: invalid literal for int() with base 10: ''
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 22:14:14 | 显示全部楼层
1.你这么写没问题的,就看整个代码怎么表达,不直接写,后面表达式你还是要转换一下type
2.回复里面“<>”就是输入代码,用这个编辑就可以支持直接复制
3.Python是逐行读取,你先一行行检查代码,如

  1. while guess: # 这里,你讲输入的guess定义为判断条件,还没有进行对比
  2.     guess=int(input()) # 这里没有任何提示,让用户再次输入,别人会懵逼的
复制代码


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

使用道具 举报

发表于 2019-5-11 22:02:26 | 显示全部楼层
一只很笨的猫 发表于 2019-5-11 21:51
好厉害!稍微改一下就可以诶!为什么我只能完全按照大家的才能出来,自己想的就怎么都不行。。然后现在还 ...

1. 如果直接 guess=input("诶呀,大了!请重新输入吧:"),guess就是字符串,secret是数字,所以guess永远不会等于secret,需要先用int把字符串转换为整数。
2.回复的上面有个<>, 你点击之后复制进去就是代码了。
3.你的代码我试了下能运行。也不会报错,你把报错情况贴出来看下。应该是你直接添加了 guess=int(input()),所以你while上面的代码已经把guess赋值了,你进入循环后又input了,所以需要再次输入才能继续下面的代码,你可以把上面那部分的guess写入while循环内。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 21:51:52 | 显示全部楼层
风丶少 发表于 2019-5-11 21:17
稍微修改下,让循环能继续输入,你看下

好厉害!稍微改一下就可以诶!为什么我只能完全按照大家的才能出来,自己想的就怎么都不行。。然后现在还在慢慢回味试图想通大家都建议。。
有3个疑问:
1. guess = int(input("诶呀,大了!请重新输入吧:"))为什么不能是
   guess=input("诶呀,大了!请重新输入吧:")
2. 你们回复的时候是怎样让自己的代码在框框里显示可以直接复制,我的就是纯文本
3. 尝试了你的建议,我又试着在while guess下面直接加一个guess=int(input()),如下,好想小甲鱼也大概是这样做的,但是为什么会报错

import random
secret = random.randint(1,10)
temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
guess = int(temp)
while guess:
    guess=int(input())
    if guess == secret:
        print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
        print("哼,猜中了也没有奖励!")
        break
    else:
        if guess > secret:
            print("诶呀,大了!请重新输入吧:")
        else:
            print("诶呀,小了!请重新输入吧:")
print("游戏结束,不玩了")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 21:17:34 | 显示全部楼层
稍微修改下,让循环能继续输入,你看下
  1. import random
  2. secret = random.randint(1,10)
  3. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
  4. guess = int(temp)
  5. while guess:
  6.     if guess == secret:
  7.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  8.         print("哼,猜中了也没有奖励!")
  9.         break
  10.     else:
  11.         if guess > secret:
  12.             guess = int(input("诶呀,大了!请重新输入吧:"))
  13.         else:
  14.             guess = int(input("诶呀,小了!请重新输入吧:"))
  15. print("游戏结束,不玩了")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 21:16:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-11 21:20 编辑
  1. import random
  2. secret = random . randint(1,10)
  3. temp = input("你猜猜小甲鱼现在心里想的是什么数字?")
  4. guess = int(temp)
  5. while guess:                      # 没有安排重新输入和更正 guess 的机会,guess 不等于 secret 的时候,会进入无限循环。
  6.     if guess == secret:
  7.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  8.         print("哼,猜中了也没有奖励!")
  9.         break
  10.     else:
  11.         if guess > secret:
  12.             print("诶呀,大了!请重新输入吧。")
  13.         else:
  14.             print("诶呀,小了!请重新输入吧。")
  15. print("游戏结束,不玩了")
复制代码

      这么改才对:
  1. import random
  2. secret = random . randint(1,10)
  3. while True:
  4.     guess = int(input("你猜猜小甲鱼现在心里想的是什么数字?"))
  5.     if guess == secret:
  6.         print("哇擦,你是小甲鱼肚子里的蛔虫吗?")
  7.         print("哼,猜中了也没有奖励!")
  8.         break
  9.     else:
  10.         if guess > secret:
  11.             print("诶呀,大了!请重新输入吧:")
  12.         else:
  13.             print("诶呀,小了!请重新输入吧:")
  14. print("游戏结束,不玩了")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 21:15:45 | 显示全部楼层
看你自己的代码应该没啥问题,你多试几次可能就正好是正确答案了。你每次只有1/10的概率正确所以你觉得一直大或者小。
你如果设置个循环就能更好实现了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 21:08:56 | 显示全部楼层
忘记说:我自己的写出来就是它会一直说猜大了或者猜小了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-1 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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