鱼C论坛

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

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

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

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

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

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

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

没有判断特殊符号等情况
做了一些修改
q=True
while q:
    word=input('请输入转换的数字:')
    if word != 'Q':
        try:
            word = int(word)
            print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
            print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
            print('十进制 -> 二进制 :%d->' % word,bin(word))
            break

        except:
            print('请重新输入!')
    else:
        break

运行结果

运行结果
想知道小甲鱼最近在做啥?请访问 -> 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

而且你这个判断太死了,如果输入了中文和特殊符号,肯定报错的,可以改成这样
q=True
while q:
    word=input('请输入转换的数字:')
    if not word.isdigit():
       print('请重新输入!')
       continue
    if word!='Q':
       word=int(word)     
       print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
       print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
       print('十进制 -> 二进制 :%d->' % word,bin(word))
    else:
       q=False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有判断特殊符号等情况
做了一些修改
q=True
while q:
    word=input('请输入转换的数字:')
    if word != 'Q':
        try:
            word = int(word)
            print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
            print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
            print('十进制 -> 二进制 :%d->' % word,bin(word))
            break

        except:
            print('请重新输入!')
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        你不能把打印数值也纳入到 for each in word 的循环体内,怎么也得放到循环结束才能最后决断应该怎么办。
q = True
while q:
    s = input('请输入转换的数字:') . strip()
    if s . isdigit() :
        word = int(s)     
        print('十进制 -> 十六进制 : %d -> 0x%x' %  (word,word))
        print('十进制 -> 八进制 : %d -> 0o%o' %(word,word))
        print('十进制 -> 二进制 :%d->' % word,bin(word))
    else:
        if s[0] == 'Q' :
            q = False
        else:
            print('请重新输入!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

我发现你这样修改之后Q停止就失效了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 10:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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