Почему цикл for принимает переменную int из одной буквы, а не из нескольких букв? - PullRequest
0 голосов
/ 25 сентября 2019

Я изучаю основные циклы for в python и заметил, что переменная 'x' работает без ошибок, в отличие от переменной "сторон".Как получилось?

Я погуглил циклы и узнал о разнице между range и xrange, но ничего, что кажется уместным для моего вопроса. Ниже показан первый фрагмент кода с ошибкой:

ZeroDivisionError: целочисленное деление или по модулю на ноль в строке ...

# This code leads to the ZeroDivisionError
import turtle
wn = turtle.Screen()
mikey = turtle.Turtle()

sides = int(input("How many sides would you like your regular  
polygon to have?"))
length = int(input("How long would you like the sides to be?"))
color = ("What color would you like to fill the polygon?")

for sides in range(sides):

    mikey.down()
    mikey.forward(length)
    mikey.left(360/sides)
# this code works fine
import turtle
wn = turtle.Screen()
mikey = turtle.Turtle()

sides = int(input("How many sides would you like your regular  
polygon to have?"))
length = int(input("How long would you like the sides to be?"))
color = ("What color would you like to fill the polygon?")
x = sides

for sides in range(sides):

    mikey.down()
    mikey.forward(length)
    mikey.left(360/x)

Почему последний работает нормально, но не первый?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

В первом примере mikey.left(360/sides) будет нулевым в первый раз, так как вы начинаете с 0 и поднимаетесь на любую сторону значения.

Во втором примере x равен любомуцелые стороны, все время, через которое вы проходите.

Хотя в любом случае вы не должны использовать sides в качестве переменной итератора, так как она уже используется.

0 голосов
/ 25 сентября 2019

Во втором вашем кодовом блоке x записывается тем, что было в sides (из ввода).Затем sides перезаписывается из итерируемого из range.Таким образом, в первом блоке кода sides переписывается (чтобы быть 0 в первый раз), а затем это ZeroDivisionError

mikey.left(360/sides) # sides = 0 here

Во втором блоке кода вы используете xвместо этого, который вообще не перезаписывается и имеет только ненулевое число (и оно не изменяется)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...