Относительно суммирования с циклом for - PullRequest
1 голос
/ 22 октября 2011

Я пытаюсь заставить пользователя ввести дату рождения, а затем добавить отдельные числа в эти числа. Кроме того, если сумма любой из этих цифр больше или равна 10, цикл повторяется, и процесс запускается снова для значения. Вот мой код пока

if (sumYear >= 10):
    sumYear2=0
    for num in str(sumYear):
        sumYear2 += int(num)
print(sumYear2)

Это работает, однако я думаю, что это было бы лучше сделать в виде цикла. И если есть какой-то способ, мне не придется использовать что-то вроде sumYear2, это было бы здорово. Обратите внимание, я не думаю, что могу использовать функцию sum().

Спасибо, ребята, за помощь. У меня проблема, хотя. Я не уверен, почему этот код не оценивается, когда я указываю месяц как 02, а день как 30

while True:
        year=input("Please enter the year you were born: ")
        month=input("Please enter the month you were born: ")
        day=input("Please enter the day you were born: ")
        if(int(month)==2 and int(day)<=29):
            break
        elif(int(month)==1 or 3 or 5 or 7 or 8 or 10 or 12 and int(day)<=31 ):
            break
        elif(int(month)==4 or 6 or 9 or 11 and int(day)<=30):
            break
        else:
            print("Please enter a valid input")

Ответы [ 3 ]

2 голосов
/ 22 октября 2011

Слишком много работы.

singledigitsum = (int(inputvalue) - 1) % 9 + 1

Обратите внимание, что это не удастся для чисел меньше 1.

1 голос
/ 22 октября 2011

@ Ответ Игнасио Васкеса-Абрамса дает формулу.Но если бы их не было, то ваш код как цикл без использования sumYear2 мог бы выглядеть так:

while sumYear >= 10:
      sumYear = sum(map(int, str(sumYear)))

Если вам не разрешено использовать sum (домашнее задание), тогда:

while sumYear >= 10:
      s = 0
      for d in str(sumYear):
          s += int(d)
      sumYear = s

По второму вопросу, предполагая Python 3:

while True:
    try:
        year  = int(input("Please enter the year you were born: "))
        month = int(input("Please enter the month you were born: "))
        day   = int(input("Please enter the day you were born: "))
        birthday = datetime.date(year, month, day)
    except ValueError as e:
        print("error: %s" % (e,))
    else:
        break

Если вам не разрешено использовать try /, кроме случаев:

year  = get_int("Please enter the year you were born: ",
                datetime.MINYEAR, datetime.MAXYEAR)
month = get_int("Please enter the month you were born: ",
                 1, 12)
day   = get_int("Please enter the day you were born: ",
                1, number_of_days_in_month(year, month))
birthday = datetime.date(year, month, day)    

Гдеget_int():

def get_int(prompt, minvalue, maxvalue):
    """Get an integer from user."""
    while True:
        s = input(prompt)
        if s.strip().isdigit():
           v = int(s)
           if minvalue <= v <= maxvalue:
              return v
        print("error: the input is not an integer in range [%d, %d]" % (
            minvalue, maxvalue))

И number_of_days_in_month():

# number of days in a month disregarding leap years
ndays = [0]*13
ndays[1::2] = [31]*len(ndays[1::2])  # odd months
ndays[::2] = [30]*len(ndays[::2])    # even months
ndays[2] = 28 # February
ndays[8] = 31 # August 
# fill other months here ...

def number_of_days_in_month(year, month):
    return ndays[month] + (month == 2 and isleap(year))
0 голосов
/ 22 октября 2011

Вы можете сделать это

>>> d=123456
>>> sum(int(c) for c in str(d))
21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...