저는 파이썬으로 지루한 것들을 자동화하여 파이썬을 배우고 있습니다. 그리고 초기 장을 진행하면서 저자의 목적과는 다른 것을 코딩하려고했습니다. 독물학 수업 중 교사는 한 종류의 달팽이가 매년 최대 12 %까지 죽어 가고 있다고 말했습니다. 그래서 코드를 계산하기로 결정했습니다.
내가 만든 코드는 다음과 같다 :
number= input('Number of individuals: ') #tells the number of individuals in the beggining
count = 0 #tells the nuumber of generations
number=int(number)
percent=input('% of loss per generation ') #% of individuals lost in each generation
percent=int(percent)
#while number > 1:
# number= number*(percent*0.01)
# number=round(number,-1)
# count = count +1
#print('generation ' + str(count) + ':' + str(number*0.1) + ' individuals')
#if number == 1:
# print(' it took ' + str(count) + ' generations to end with the species')
while True:
if number == 1:
print(' it took ' + str(count) + ' generations to end with the species')
if number >1:
number= number*(percent*0.01)
number=round(number,-1)
count = count +1
print('generation ' + str(count) + ':' + str(number*0.1) + ' individuals')
if number == 0 :
break
내가 시도한 첫 번째 코드는 주석으로되어 있으며 문제를 해결하기 위해 다른 방법을 시도했습니다.
내 문제는 : 개인 수와 손실 비율을 입력하고 싶습니다. 결국 (개인이 자신과 짝을 지을 수 없기 때문에 1), 나는 종으로 끝나는 데 필요한 세대 수를 말하고 싶습니다. 문제는 0 값을 원하지 않기 때문에 프로그램이 예상보다 한 번 더 반복 할 때 시작합니다 (라운드 () 함수를 사용하기 전에 더 많은 시간을 반복합니다) .1에 도달하면 원합니다. 몇 세대가 걸 렸는지 말해줘요.
답을 찾으려고했지만 초보자이기 때문에 올바른 검색을 수행 할 용어를 제대로 알지 못할 수 있습니다. 내가 보는 방식대로, 프로그램은 내가 원하는 것처럼 실행되어야하지만, 내가 얻지 못하는 것을 놓친 것 같습니다.
- 답변 # 1
- 답변 # 2
이것을 살펴보십시오.
number = input('Number of individuals: ') # tells the number of individuals in the beggining count = 0 # tells the nuumber of generations number = int(number) percent = input('% of loss per generation ') # % of individuals lost in each generation percent = int(percent) while number > 1: number = number * (1 - percent * 0.01) number = int(number) count = count + 1 print('generation ' + str(count) + ':' + str(number) + ' individuals') print(' it took ' + str(count) + ' generations to end with the species')
@Alans 제안 포함
종료되지 않는 루프 문제는 개별 "사망"의 0.5보다 작은 끝 부분에 도달했기 때문에 발생했습니다. 당신의
round(number, -1)
와 함께 예를 들어 반올림 5 명중 0.3 명이 사망하여 4.7 명이 남았지 만 반올림으로 5 명을 다시 만들었다. 와이즈 비즈 반올림합니다. - 답변 # 3
코드에는 두 가지 문제가 있습니다.
<올>올바른 반올림--2와 같은 음수 값으로 반올림하려고합니다. 반올림하는 동안 양수를 사용해야합니다.
반복 할 때마다 숫자 줄이기
int(number)
코드에서 두 가지 이상 만 변경하면됩니다.
변경 후 코드 :
number = number - number*percent*0.01
출력 :
number= input('Number of individuals: ') #tells the number of individuals in the beggining count = 0 #tells the nuumber of generations number=int(number) percent=input('% of loss per generation ') #% of individuals lost in each generation percent=int(percent) while True: if number <= 1: print(' it took ' + str(count) + ' generations to end with the species') break if number > 1: number = number - number*percent*0.01 number = round(number,2) count = count +1 print('generation ' + str(count) + ':' + str(number*0.1) + ' individuals') print "Number is ",number if number == 0 : break
- 답변 # 4
이오 시프 세라 페 이미 디스 (Iosif Serafeimidis)의 답변에 따르면, 감소 금액이 1보다 작을 때까지 인구를 계속 줄입니다. 다른 사람들이 말했듯이 대답은 실제로 표현하고자하는 것에 달려 있습니다. NB 해당 round (number)는 int (number)와 달리 가장 가까운 정수로 반올림하며 그 다음으로 가장 낮은 정수로 반올림됩니다. 수정 된 버전은 다음과 같습니다.
Number of individuals: "10" % of loss per generation "2" generation 1:0.98 individuals Number is 9.8 generation 2:0.96 individuals Number is 9.6 generation 3:0.941 individuals Number is 9.41 generation 4:0.922 individuals Number is 9.22 generation 5:0.904 individuals Number is 9.04 generation 6:0.886 individuals Number is 8.86 generation 7:0.868 individuals Number is 8.68 generation 8:0.851 individuals Number is 8.51 generation 9:0.834 individuals Number is 8.34 generation 10:0.817 individuals Number is 8.17 generation 11:0.801 individuals Number is 8.01 generation 12:0.785 individuals Number is 7.85 generation 13:0.769 individuals Number is 7.69 generation 14:0.754 individuals Number is 7.54 generation 15:0.739 individuals Number is 7.39 generation 16:0.724 individuals Number is 7.24 generation 17:0.71 individuals Number is 7.1 generation 18:0.696 individuals Number is 6.96 generation 19:0.682 individuals Number is 6.82 generation 20:0.668 individuals Number is 6.68 generation 21:0.655 individuals Number is 6.55 generation 22:0.642 individuals Number is 6.42 generation 23:0.629 individuals Number is 6.29 generation 24:0.616 individuals Number is 6.16 generation 25:0.604 individuals Number is 6.04 generation 26:0.592 individuals Number is 5.92 generation 27:0.58 individuals Number is 5.8 generation 28:0.568 individuals Number is 5.68 generation 29:0.557 individuals Number is 5.57 generation 30:0.546 individuals Number is 5.46 generation 31:0.535 individuals Number is 5.35 generation 32:0.524 individuals Number is 5.24 generation 33:0.514 individuals Number is 5.14 generation 34:0.504 individuals Number is 5.04 generation 35:0.494 individuals Number is 4.94 generation 36:0.484 individuals Number is 4.84 generation 37:0.474 individuals Number is 4.74 generation 38:0.465 individuals Number is 4.65 generation 39:0.456 individuals Number is 4.56 generation 40:0.447 individuals Number is 4.47 generation 41:0.438 individuals Number is 4.38 generation 42:0.429 individuals Number is 4.29 generation 43:0.42 individuals Number is 4.2 generation 44:0.412 individuals Number is 4.12 generation 45:0.404 individuals Number is 4.04 generation 46:0.396 individuals Number is 3.96 generation 47:0.388 individuals Number is 3.88 generation 48:0.38 individuals Number is 3.8 generation 49:0.372 individuals Number is 3.72 generation 50:0.365 individuals Number is 3.65 generation 51:0.358 individuals Number is 3.58 generation 52:0.351 individuals Number is 3.51 generation 53:0.344 individuals Number is 3.44 generation 54:0.337 individuals Number is 3.37 generation 55:0.33 individuals Number is 3.3 generation 56:0.323 individuals Number is 3.23 generation 57:0.317 individuals Number is 3.17 generation 58:0.311 individuals Number is 3.11 generation 59:0.305 individuals Number is 3.05 generation 60:0.299 individuals Number is 2.99 generation 61:0.293 individuals Number is 2.93 generation 62:0.287 individuals Number is 2.87 generation 63:0.281 individuals Number is 2.81 generation 64:0.275 individuals Number is 2.75 generation 65:0.269 individuals Number is 2.69 generation 66:0.264 individuals Number is 2.64 generation 67:0.259 individuals Number is 2.59 generation 68:0.254 individuals Number is 2.54 generation 69:0.249 individuals Number is 2.49 generation 70:0.244 individuals Number is 2.44 generation 71:0.239 individuals Number is 2.39 generation 72:0.234 individuals Number is 2.34 generation 73:0.229 individuals Number is 2.29 generation 74:0.224 individuals Number is 2.24 generation 75:0.22 individuals Number is 2.2 generation 76:0.216 individuals Number is 2.16 generation 77:0.212 individuals Number is 2.12 generation 78:0.208 individuals Number is 2.08 generation 79:0.204 individuals Number is 2.04 generation 80:0.2 individuals Number is 2.0 generation 81:0.196 individuals Number is 1.96 generation 82:0.192 individuals Number is 1.92 generation 83:0.188 individuals Number is 1.88 generation 84:0.184 individuals Number is 1.84 generation 85:0.18 individuals Number is 1.8 generation 86:0.176 individuals Number is 1.76 generation 87:0.172 individuals Number is 1.72 generation 88:0.169 individuals Number is 1.69 generation 89:0.166 individuals Number is 1.66 generation 90:0.163 individuals Number is 1.63 generation 91:0.16 individuals Number is 1.6 generation 92:0.157 individuals Number is 1.57 generation 93:0.154 individuals Number is 1.54 generation 94:0.151 individuals Number is 1.51 generation 95:0.148 individuals Number is 1.48 generation 96:0.145 individuals Number is 1.45 generation 97:0.142 individuals Number is 1.42 generation 98:0.139 individuals Number is 1.39 generation 99:0.136 individuals Number is 1.36 generation 100:0.133 individuals Number is 1.33 generation 101:0.13 individuals Number is 1.3 generation 102:0.127 individuals Number is 1.27 generation 103:0.124 individuals Number is 1.24 generation 104:0.122 individuals Number is 1.22 generation 105:0.12 individuals Number is 1.2 generation 106:0.118 individuals Number is 1.18 generation 107:0.116 individuals Number is 1.16 generation 108:0.114 individuals Number is 1.14 generation 109:0.112 individuals Number is 1.12 generation 110:0.11 individuals Number is 1.1 generation 111:0.108 individuals Number is 1.08 generation 112:0.106 individuals Number is 1.06 generation 113:0.104 individuals Number is 1.04 generation 114:0.102 individuals Number is 1.02 generation 115:0.1 individuals Number is 1.0 it took 115 generations to end with the species
- 답변 # 5
먼저 살아있는 달팽이 수를 잘못 계산했습니다. 모든 반복 달팽이에는 살아있는 달팽이가 (100 %-손실 %) * 개가 있어야합니다. 두 번째는 조건과 라운드 기능입니다. 예를 들어, 반올림 후 이전 숫자를 낮추기에 손실이 충분하지 않은 지점에서 코드가 문제가 될 수 있습니다. 4 * 0.88 = 3.52. 반올림 후 다시 4입니다. 따라서 문제의 성격에 따라 반올림에서 사임하거나 대신 바닥을 사용할 수 있습니다. 질문은 달팽이 0.52를 어떻게 다룰까요?
12 %의 손실과 100 명의 개인의 경우 반올림없이 종을 끝내려면 37 세대가 걸렸고, 바닥을 사용할 때 종을 끝내려면 24 세대가 걸렸습니다.
아래 코드가 작동합니다.
number = input('Number of individuals: ') # tells the number of individuals in the beginning count = 0 # tells the nuumber of generations number = int(number) percent = input('% of loss per generation ') # % of individuals lost in each generation percent = int(percent) while number > 1: reduction = number * (percent * 0.01) if reduction < 1: print('No further reductions possible') break number = round(number - reduction) count = count + 1 print('generation ' + str(count) + ':' + str(number) + ' individuals') print(' after ' + str(count) + ' generations, there were ' + str(number) + ' individuals')
import numpy as np while True: if number <= 1: # <= covers values below 1 print(' it took ' + str(count) + ' generations to end with the species') break; if number > 1: number = number*(1-percent*0.01) # number left is 1 - minus loss percent # number = np.floor(number) # optional floor count = count + 1 # print('generation ' + str(count) + ':' + str(number*0.1) + ' individuals')
관련 자료
- python - 목록 반복에서 특정 항목을 추출하는 동안 문제, ( 'string',)
- 정규식이 작동하지 않음 Python이 대소 문자와 일치하지 않음
- 셀레늄 파이썬에서 목록 루프를 작동시키는 방법은 무엇입니까?
- for loop - Python으로 목록을 작성하는 동안 개인 참조
- once ()가 Flutter 및 Firebase로 작업하는 동안 작동/인식되지 않는 것 같습니다
- 루트에서만 작동하는 간단한 파이썬 파일 복사
- pygame - Python에서 한 번에 여러 while 루프를 실행하는 방법
- 내 Python 코드가 부울을 올바르게 평가하지 않는 이유는 무엇입니까?
- 입력을 위해 Python 생성기를 사용하는 동안 keras의 OOM 오류
- json에 쓰는 동안 python jsondecoderJSONDecodeError
- I am having trouble in Python - Python에 문제가 있습니다가져 오기에서 작동하지 않습니다
- 파이썬에서 정규식을 적용하는 동안 목록을 반복하는 방법은 무엇입니까?
- Python (BeautifulSoup)을 사용하여 사전 및 웹 스크래핑 작업
- 파이썬 스크립트에서 작동하지 않는 입력 함수
- tkinter - python - 실행 파일이 올바르게 실행되지 않음
- 셀레늄 파이썬 제품로드 버튼이 작동하지 않음
- VS Code에서 Python 모듈을 올바르게 가져 오는 방법은 무엇입니까?
- excel - 찾기를 사용하는 동안 SearchDirection이 작동하지 않습니다
- pandas - 반복하는 동안 Python 사전에 항목 추가
- 파이썬 애플리케이션이 실행되는 동안 mysql을 연결하는 방법이 있습니까?
- python : 파이썬의 송장 (영수증) 프로그램. 이전 값 덮어 쓰기 방지 방법
- Python을 사용하여 동영상에서 I-Frame 목록 가져 오기
- python : 빈 경로가 다음 중 어느 것과도 일치하지 않습니다.
- python : 스크립트를 사용하여 설명이 포함 된 Trac 마일스톤을 생성하려면 어떻게해야합니까?
- python : 팬더에서 합계를 올바르게 표시하지 않는 합계 함수
- python : list.sort ()를 사용하여 목록을 정렬하는 동안 오류가 발생합니다.
- Python에서 Discord 봇 명령에 대한 쿨 다운을 어떻게 추가합니까?
- python : 반복 가능한 압축 풀기의 기본값
- python : django에서 makemigrations /migrate를 시도 할 때 오류가 발생했습니다.
- python : 여러 키에 동일한 값을 할당하려면 어떻게해야합니까? 파이썬
이 코드는 더 나은 솔루션이므로 개선이 필요하기 때문에 주석으로 코드에 대해 논의 해 봅시다. 코드에 두 가지 주요 문제가 있습니다
1) 왜
number * 0.1
를 인쇄합니까 그냥number
대신 ? 10을 표시해야하는 경우 1이 표시되며 이것이 주요 문제이며 오해의 소지가 있다고 생각합니다.2) 다음 두 줄은 루프에 없어야합니다. 실제로 1을 통과하면 결과 메시지가 표시되지 않을 수 있기 때문입니다. 해당 줄은 루프 뒤에 배치해야합니다.
결과는 다음과 같습니다.
업데이트 :
걱정하지 않으면 약간의 코드 스타일 개선 코드가 적용됩니다 :
업데이트 # 2 :
루프 만 수정했지만 @Alan이 주석에서 지적한 것처럼 손실을 잘못 계산합니다. 퍼센트는
1 - int(percent) * 0.01
여야합니다코드 https://repl.it/NWi4/2
업데이트 # 3 :
반올림을 개선하기 위해 코드 블록을 수정했습니다. 그것은
round(number, -1)
이었다 을 통해 수십 개의 반올림이 발생했습니다.