Skip to main content
 首页 » 编程设计

Python int/str 检查

2025年05月04日12sxdcgaq8080

我有一项家庭作业,我只完成了最低限度的作业,但在完成作业时,我对如何改进我的程序产生了兴趣。代码的要点是绘制用户定义的形状并在输入无效输入时提供反馈。我想继续这样做,如果用户输入 str 作为高度/宽度或其中一个坐标,它会给出错误,但我无法弄清楚该怎么做。这是一个入门类(class),所以如果您记住我们只是开始 while 循环,我们已经了解了 for 循环,if/else/etc。

这是我目前拥有的代码:

 
def draw_user_shape(pen): 
    shape = input("Please enter a shape: ") 
    while shape != "square" and shape != "rectangle" and shape != "triangle": 
        shape = input("Invalid shape, please enter either square, rectangle, or triangle: ") 
    if shape == "square": 
        h = input("Please enter a height: ") 
        while h != int or int(h) < 1: 
            h = input("That is an invalid height, please enter an positive integer: ") 
        h = int(h) 
        c = input("Please enter a color: ") 
        while c != str and str(c) != "red" and str(c) != "green" and str(c) != "blue": 
            c = input("That is an invalid color, please enter either red, blue, or green: ") 
        c = str(c) 
        x = input("Please enter an x-coordinate: ") 
        while x != int and int(x) == 1: 
            x = input("That is an invalid x-coordinate, please enter an integer: ") 
        x = int(x) 
        y = input("Please enter a y-coordinate: ") 
        while y != int and int(y) == int: 
            y = input("That is an invalid y-coordinate, please enter an integer: ") 
        y = int(y) 
        pen.fillcolor(c) 
        pen.up() 
        pen.goto(x,y) 
        pen.down() 
        pen.begin_fill() 
        pen.goto(x,y+h) 
        pen.goto(x+h,y+h) 
        pen.goto(x+h,y) 
        pen.goto(x,y) 
        pen.end_fill() 
        pen.up() 
    elif shape == "rectangle": 
        h = input("Please enter a height: ") 
        while h != int and int(h) < 1: 
            h = input("That is an invalid height, please enter an positive integer: ") 
        h = int(h) 
        w = input("Please enter a width: ") 
        while w != int and int(w) < 1: 
            w = input("That is an invalid height, please enter an positive integer: ") 
        w = int(w) 
        c = input("Please enter a color: ") 
        while c != str and str(c) != "red" and str(c) != "green" and str(c) != "blue": 
            c = input("That is an invalid color, please enter either red, blue, or green: ") 
        c = str(c) 
        x = input("Please enter an x-coordinate: ") 
        while x != int and int(x) == 1: 
            x = input("That is an invalid x-coordinate, please enter an integer: ") 
        x = int(x) 
        y = input("Please enter a y-coordinate: ") 
        while y != int and int(y) == int: 
            y = input("That is an invalid y-coordinate, please enter an integer: ") 
        y = int(y) 
        pen.fillcolor(c) 
        pen.up() 
        pen.goto(x, y)  
        pen.down() 
        pen.begin_fill() 
        pen.goto(x,y+h) 
        pen.goto(x+w,y+h) 
        pen.goto(x+w,y) 
        pen.goto(x,y) 
        pen.end_fill() 
        pen.up() 
    elif shape == "triangle": 
        h = input("Please enter a height: ") 
        while h != int and int(h) < 1: 
            h = input("That is an invalid height, please enter an positive integer: ") 
        h = int(h) 
        w = input("Please enter a width: ") 
        while w != int and int(w) < 1: 
            w = input("That is an invalid height, please enter an positive integer: ") 
        w = int(w) 
        c = input("Please enter a color: ") 
        while c != str and str(c) != "red" and str(c) != "green" and str(c) != "blue": 
            c = input("That is an invalid color, please enter either red, blue, or green: ") 
        c = str(c) 
        x = input("Please enter an x-coordinate: ") 
        while x != int and int(x) == 1: 
            x = input("That is an invalid x-coordinate, please enter an integer: ") 
        x = int(x) 
        y = input("Please enter a y-coordinate: ") 
        while y != int and int(y) == int: 
            y = input("That is an invalid y-coordinate, please enter an integer: ") 
        y = int(y) 
        pen.fillcolor(c) 
        pen.up() 
        pen.goto(x,y) 
        pen.down() 
        pen.begin_fill() 
        pen.goto(x+w/2,y+h) 
        pen.goto(x+w,y) 
        pen.goto(x,y) 
        pen.end_fill() 
        pen.up() 
 
def main(): 
    import turtle 
    pen = turtle.Turtle() 
    draw_user_shape(pen) 
 
main() 

请您参考如下方法:

在这种情况下,您会希望使用异常处理。基本上,想法是获取输入并尝试 转换为int。如果失败,则会引发 ValueError。否则您将取回转换后的值。请记住,输入将始终作为 str 提供给您,因此您不能简单地测试它是否是 int。假设你使用的是 Python 3,你可以做这样的事情来不断询问,直到输入正确的值:

# keep asking for input until we get the right one 
while True: 
    myInput = input('give me a number: ') 
    try: 
        myValue = int(myInput) 
        # if we reach this point, that means we got our number 
        break # this will jump out of the loop 
    except ValueError: 
        # if we reach this point, that means the input was bad 
        print('invalid input')