鱼C论坛

 找回密码
 立即注册
查看: 2297|回复: 6

[已解决]python第15讲课后作业动动手问题

[复制链接]
发表于 2020-11-19 15:51:57 | 显示全部楼层 |阅读模式

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

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

x
想改进一下程序加入一个输入限制条件使输入只能是数字类型,但是运行之后导致运行显示两遍不知道是哪里的问题
我的代码如下:
  1. char='abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ'
  2. q=True
  3. while q:
  4.     word=input('请输入转换的数字:')
  5.     for each in word:
  6.        if each in char:
  7.            print('请重新输入!')
  8.            break
  9.        if word!='Q':
  10.            word=int(word)     
  11.            print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  12.            print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  13.            print('十进制 -> 二进制 :%d->' % word,bin(word))
  14.        else:
  15.            q=False
复制代码


运行结果如下:
最佳答案
2020-11-19 16:28:29
运行两遍的原因是你使用了for循环,输入的内容有多少个元素就会循环多少遍
另外你的逻辑是做一个判断列表,输入的内容是在列表中时,重新输入
输入的内容不在列表时转化成整型
输入大写"Q"时终止

没有判断特殊符号等情况
做了一些修改

  1. q=True
  2. while q:
  3.     word=input('请输入转换的数字:')
  4.     if word != 'Q':
  5.         try:
  6.             word = int(word)
  7.             print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  8.             print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  9.             print('十进制 -> 二进制 :%d->' % word,bin(word))
  10.             break

  11.         except:
  12.             print('请重新输入!')
  13.     else:
  14.         break
复制代码

运行结果

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

使用道具 举报

发表于 2020-11-19 16:07:56 | 显示全部楼层
本帖最后由 sunrise085 于 2020-11-19 16:09 编辑

你的这个for循环目的是啥?
你输入78的时候,word是字符串‘78’
然后用for循环遍历这个字符串,当然会循环两遍啦
你若输入 65535 ,那么结果会输出5遍

而且你的这个程序不可能执行到else那里,因为若word中有字母,就break跳出了,若是只有数字则会执行if。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 16:26:46 | 显示全部楼层
按照你完整的代码来看,应该是你搞错了缩进
  1. char='abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ'
  2. q=True
  3. while q:
  4.     word=input('请输入转换的数字:')
  5.     for each in word:
  6.        if each in char:
  7.            print('请重新输入!')
  8.            break
  9.     if word!='Q':
  10.        word=int(word)     
  11.        print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  12.        print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  13.        print('十进制 -> 二进制 :%d->' % word,bin(word))
  14.     else:
  15.        q=False
复制代码


而且你这个判断太死了,如果输入了中文和特殊符号,肯定报错的,可以改成这样
  1. q=True
  2. while q:
  3.     word=input('请输入转换的数字:')
  4.     if not word.isdigit():
  5.        print('请重新输入!')
  6.        continue
  7.     if word!='Q':
  8.        word=int(word)     
  9.        print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  10.        print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  11.        print('十进制 -> 二进制 :%d->' % word,bin(word))
  12.     else:
  13.        q=False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 16:28:29 | 显示全部楼层    本楼为最佳答案   
运行两遍的原因是你使用了for循环,输入的内容有多少个元素就会循环多少遍
另外你的逻辑是做一个判断列表,输入的内容是在列表中时,重新输入
输入的内容不在列表时转化成整型
输入大写"Q"时终止

没有判断特殊符号等情况
做了一些修改

  1. q=True
  2. while q:
  3.     word=input('请输入转换的数字:')
  4.     if word != 'Q':
  5.         try:
  6.             word = int(word)
  7.             print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  8.             print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  9.             print('十进制 -> 二进制 :%d->' % word,bin(word))
  10.             break

  11.         except:
  12.             print('请重新输入!')
  13.     else:
  14.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 16:32:45 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-19 16:36 编辑

        你不能把打印数值也纳入到 for each in word 的循环体内,怎么也得放到循环结束才能最后决断应该怎么办。
  1. q = True
  2. while q:
  3.     s = input('请输入转换的数字:') . strip()
  4.     if s . isdigit() :
  5.         word = int(s)     
  6.         print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
  7.         print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
  8.         print('十进制 -> 二进制 :%d->' % word,bin(word))
  9.     else:
  10.         if s[0] == 'Q' :
  11.             q = False
  12.         else:
  13.             print('请重新输入!')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 10:23:16 | 显示全部楼层
非常感谢大家的回复,有的问题自己看好多遍都反应不过来大家一指点就立刻明白了,非常感谢非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 15:10:13 | 显示全部楼层
2012277033 发表于 2020-11-19 16:26
按照你完整的代码来看,应该是你搞错了缩进

而且你这个判断太死了,如果输入了中文和特殊符号,肯定报错 ...

我发现你这样修改之后Q停止就失效了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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