Проблемы с созданием дневного конвертера в python - PullRequest
0 голосов
/ 16 сентября 2018

Я довольно новый Python-кодер, поэтому любая помощь будет отличной. Я хочу, чтобы мой код делал что-то вроде этого:

How many days? 600
600 days is equivalent to 85.71428571428571 weeks.
600 days is equivalent to 20.0 months.
600 days is equivalent to 1.64385616438356 years.

Но когда я пытаюсь воспроизвести мой код:

x = input("How many days?")
w = 7
m = 30
y = 365
print(f"{x} days is equivalent to {x/w} weeks.")

Это говорит примерно так:

TypeError: unsupported operand type(s) for /: 'str' and 'float'

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Подразделение нужно int, поэтому:

import sys
x = input("How many days?")
if x.isdigit():
    x=int(x)
else:
    print('non-numeric day')
    sys.exit()
...

Это Python 3 больше не Python 2, поэтому input из Python 2 удаляется и raw_input переименовывается в input

Кстати в конце:

print(f"{x} days is equivalent to {x/w} weeks.")
0 голосов
/ 16 сентября 2018

Это потому, что переменная 'x' читается из ввода как строка.Попробуйте преобразовать его в int

. Сделайте следующее:

try:
    x = int(input("How many days?"))
except Exception as e:
    print(e)
    exit(1)
w = 7
m = 30
y = 365
print(f"{x} days is equivalent to {x/w} weeks.")

. Обратите внимание, что я делаю попытку здесь, поскольку, если пользователь предоставит нечисловые значения, возникнет ошибка.(как это должно).Рассмотрим лучший способ учета этого.

0 голосов
/ 16 сентября 2018

Функция input всегда возвращает строку в Python 3, поэтому вам придется написать:

x = int(input('How many days? '))

В данный момент вы пытаетесь выполнить...

str / int
# and you need 
int / int

Таким образом, приведение результата ввода к int будет работать до тех пор, пока вход можно преобразовать.Вы можете углубиться в функции и обработку ошибок, если хотите убедиться, что введен правильный ввод:

def int_input(prompt):
  while True:
    try:
      x = int(input(prompt))
    except ValueError:
      print('bad input!')
    else:
      return x

А затем замените ваш int(input(...)) на int_input(...).

...