首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强行插入if/else语句的代码

强行插入if/else语句的代码
EN

Stack Overflow用户
提问于 2017-04-17 23:51:37
回答 2查看 92关注 0票数 0

我正在制作一个多重计算器,我几乎把它弄坏了,问题是,当我请求一个数字时,如果用户给出一个字符串输入,即使我有一个用于else:语句的if,代码也会中断并抛出一个错误。

代码语言:javascript
复制
def Start():
    numberOneList = []
    numberTwoList = []
    multiples = 100000
    iterations = 0
    multiplicity = int(input("How many common multiplicities you would like to find between two numbers: "))

    if multiplicity > 0 and multiplicity < 100001:
        numberOne = int(input("Input the first number: "))
        if numberOne > 0 and numberOne < 100001:
            numberTwo = int(input("Input the second number: "))
            if numberTwo > 0 and numberTwo < 100001:
                for i in range(multiples):
                    mNumberOne = numberOne * i
                    numberOneList.append(mNumberOne)
                    mNumberTwo = numberTwo * i
                    numberTwoList.append(mNumberTwo)
                print("")
                print("Common multiplicities:")
                print("")
                print("Calculating...")
                print("")
                for i in numberOneList:
                    for a in numberTwoList:
                        if a == i:
                            if a != 0:
                                print(numberOne, "x", i / numberOne, "=", i)
                                print(numberTwo, "x", a / numberTwo, "=", a)
                                print("")
                                iterations += 1
                                if iterations == multiplicity:
                                    Again()
                                else:
                                    continue
                            else:
                                continue
                        else:
                            continue
            else:
                print("Invalid answer, restarting")
                Start()
        else:
            print("Invalid answer, restarting")
            Start()
    else:
        print("Invalid answer, restarting")
        Start()

def Again():
    calculateAgain = input("Calculate again? [y/n]: ")
    if calculateAgain == "y":
        Start()
    if calculateAgain == "n":
        quit()
    else:
        Again()

Start()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-18 00:00:13

您得到了一个错误,因为您在用户的输入上断言一个int类型,而不首先检查它是否有效。正如@kindall在comment中所指出的,try/except允许您捕获失败的类型断言并优雅地处理它们。用下面这样的东西包装您的int转换应该可以做到这一点:

代码语言:javascript
复制
try:
    multiplicity = int(input("How many common multiplicities you would like to find between two numbers: "))
except ValueError as e:
    print('Please input a valid number')
    return str(e)

(请注意,您可能只是重复提示,而不是返回错误文本。)

票数 0
EN

Stack Overflow用户

发布于 2017-04-18 00:12:18

当前代码的一个快速修复方法是创建一个函数,以获取输入或无效值(如果不是int )。

代码语言:javascript
复制
def input_positive_integer(message):
    while(True):
        try:
            value = int(input(message))
            if (value<=0 or value > 100000 ):
                raise ValueError("Not in range")
            break
        except ValueError as e:
            print("Value error!! Try again!")

然后,您可以更改接收整数的所有输入,以使用此函数。

注意,它将保持循环状态,直到该值有效为止。

我真的建议您避免对代码进行递归,尝试使用一个简单的while循环.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43461395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档