for i in range(100, 1000):
i1 = i // 100 # 取百位数字 123//100=1
i2 = i // 10 % 10 # 取十位数字 123//10=12 12%10=2
i3 = i % 10 # 取个位数字 123%10=3
if i1 ** 3 + i2 ** 3 + i3 ** 3 == i:
print(f"{i}是水仙花数")
# 153 是水仙花数
# 370 是水仙花数
# 371 是水仙花数
# 407 是水仙花数
for i in range(1000,10000):
i1 = i // 1000 # 取千位数字 1234//1000=1
i2 = i // 100 % 10 # 取百位数字 1234//100=12 12%10=2
i3 = i // 10 % 10 # 取十位数字 1234//10=123 123%10=3
i4 = i % 10 # 取个位数字 1234%10=4
# print(i,i1,i2,i3,i4)
if i1 ** 4 + i2 ** 4 + i3 ** 4 + i4 ** 4 == i:
print(f'{i}是四叶玫瑰数')
# 1634 是四叶玫瑰数
# 8208 是四叶玫瑰数
# 9474 是四叶玫瑰数
str = input("请输入字符串")
print(str[::-1])
str = input("请输入字符串")
list = []
for x in range(len(str) -1,-1,-1):
list.append(str[x])
print(''.join(list))
随机生成一个 100 以内的整数,共有 10 次机会开始游戏,输入猜测的数字。
import random as rd
number = rd.randint(0,100)
for i in range(10):
choice = int(input("请输入你要猜测的数字:"))
if choice > number:
print("你猜大了")
elif choice < number:
print("你猜小了")
else:
print("你猜对了,真棒!")
print(f'你一共用了{i + 1}次机会')
break
print(f'还剩{9 - i}次机会')
else:
print('游戏结束,你没有猜到')
公鸡每只 5 元,母鸡每只 3 元,小鸡 3 只一元,现要求用 100 元钱买 100 只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只?
count = 0
for x in range(1,20):
for y in range(1,33):
z = 100 - x -y
if z > 0 and 5 * x + 3 * y + z / 3 == 100:
count += 1
print("="*60)
print(f'第{count}种买法,公鸡买了{x}只,母鸡买了{y}只,小鸡买了{z}只')
# == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
# 第1种买法,公鸡买了4只,母鸡买了18只,小鸡买了78只
# == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
# 第2种买法,公鸡买了8只,母鸡买了11只,小鸡买了81只
# == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
# 第3种买法,公鸡买了12只,母鸡买了4只,小鸡买了84只
输入年月日,输出该日期是否是闰年,并且输出该日期是此年份的第几天
year = int(input("请输入年份"))
month = int(input("请输入月份"))
day = int(input("请输入日期"))
date_list = [31,29,31,30,31,30,31,31,30,31,30,31]
count_day = day
if year % 4 == 0 and year % 100 !=0 or year % 400 == 0:
print(f'{year}年是闰年')
date_list[1]=29
else:
print(f'{year}年是平年')
date_list[1]=28
for i in range(month-1):
count_day += date_list[i]
print(f'{year}年{month}月{day}日是当年的第{count_day}天')
p = 1
print(f'第10天还剩下{p}个桃子')
for i in range(9,0,-1):
p = (p + 1) * 2
print(f'第{i}天还剩下{p}个桃子')
print(f'第一天一共摘了{p}个桃子')
# 第10天还剩下1个桃子
# 第9天还剩下4个桃子
# 第8天还剩下10个桃子
# 第7天还剩下22个桃子
# 第6天还剩下46个桃子
# 第5天还剩下94个桃子
# 第4天还剩下190个桃子
# 第3天还剩下382个桃子
# 第2天还剩下766个桃子
# 第1天还剩下1534个桃子
# 第一天一共摘了1534个桃子
import numpy as np
pop_list = np.random.randint(100,size=6)
# pop_list = [82,15,15,41,37,31]
# pop_list = [29,12,19,37,14]
count = len(pop_list)
print('没排序之前的列表',pop_list)
for i in range(count-1):
for j in range(count-i-1):
if pop_list[j] > pop_list[j + 1]: # 如果要降序就是改成 < 号
pop_list[j],pop_list[j+1] = pop_list[j+1],pop_list[j]
print('排好序的列表为',pop_list)
# 排好序的列表为 [15, 15, 31, 37, 41, 82]
# 排好序的列表为 [12, 14, 19, 29, 37]
假设有一个有序列表:[5,7,11,22,27,33,39,52,58]
请问数字 11 是否在此列表中,如果在它的索引值为多少?
arr_list = [5,7,11,22,27,33,39,52,58]
number = 11
count = 0
left = 0
right = len(arr_list)-1
while left<=right:
middle = (left+right)//2
count += 1
if number > arr_list[middle]:
left = middle +1
elif number < arr_list[middle]:
right = middle - 1
else:
print(f'数字{number}已找到,索引值为{middle}')
break
else:
print(f'数字{number}没有找到')
print(f'一共用了{count}次查找')
# 数字11已找到,索引值为2, 一共用了3次查找
arr_list = [5,7,11,22,27,33,39,52,58]
def binary_search(number,left,right):
if left <= right:
middle = (left + right) // 2
if number < arr_list[middle]:
right = middle - 1
elif number > arr_list[middle]:
left = middle + 1
else:
return middle
return binary_search(number,left,right)
else:
return -1
print(binary_search(11,0,len(arr_list)-1))
基本思想:从未排序的序列中找到一个最小的元素,放到第一位,再从剩余未排序的序列中找到最小的元素,放到第二位,依此类推,直到所有元素都排序完毕
import random as rd
sec_list = [rd.randint(1,100) for i in range(8)]
# sec_list = [91,30,93,98,26,98,20,90]
length = len(sec_list)
print(f'未排序的列表为:{sec_list}')
for i in range(length -1):
min_index = i
for j in range(i + 1,length):
if sec_list[min_index] > sec_list[j]:
min_index = j
sec_list[min_index],sec_list[i] = sec_list[i],sec_list[min_index]
print(f'第{i+1}轮排好序是:{sec_list}')
print(f'最终排好序的列表为:{sec_list}')
# 未排序的列表为:[91, 30, 93, 98, 26, 98, 20, 90]
# 第1轮排好序是:[20, 30, 93, 98, 26, 98, 91, 90]
# 第2轮排好序是:[20, 26, 93, 98, 30, 98, 91, 90]
# 第3轮排好序是:[20, 26, 30, 98, 93, 98, 91, 90]
# 第4轮排好序是:[20, 26, 30, 90, 93, 98, 91, 98]
# 第5轮排好序是:[20, 26, 30, 90, 91, 98, 93, 98]
# 第6轮排好序是:[20, 26, 30, 90, 91, 93, 98, 98]
# 第7轮排好序是:[20, 26, 30, 90, 91, 93, 98, 98]
# 最终排好序的列表为:[20, 26, 30, 90, 91, 93, 98, 98]
import random as rd
print('=' * 60)
print(' ' * 20, '剪刀石头布游戏')
print('1代表剪刀 2代表石头 3代表布')
game_info = {1: "剪刀", 2: "石头", 3: "布"}
score = 100
while True:
robots_choice = rd.randint(1, 3)
user_choice = input("请出拳")
if user_choice not in '123':
print('出拳错误,请重新出拳')
continue
user_choice = int(user_choice)
print('*' * 60)
print(f'电脑出{game_info[robots_choice]}')
print(f'你出{game_info[user_choice]}')
print('*' * 60)
if user_choice == 1 and robots_choice == 3 or user_choice == 2 \
and robots_choice == 1 or user_choice == 3 and robots_choice == 2:
score += 10
print(f'你赢得本轮游戏,当前分数为{score}')
elif user_choice == robots_choice:
print(f'本轮游戏平局,当前分数为{score}')
else:
score -= 10
print(f'你输了本轮游戏,当前分数{score}')
if score >= 200:
print('游戏结束,你赢得比赛')
break
elif score <= 0:
print('游戏结束,你输了')
break
在给定的数字下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必定为 1
比如数字:19
def sum_square(n):
sum = 0
for i in str(n):
sum += int(i) ** 2
return sum
list1 = []
n = int(input('请输入数字:'))
while sum_square(n) not in list1:
n = sum_square(n)
list1.append(n)
if n == 1:
print('是快乐数')
else:
print('不是快乐数')
小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的 6 倍“。小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过 8 岁啊。“ 请你写出:小明的较小的妹妹的年龄。
for i in range(1,100):
for j in range(1,i):
if i*j == 6*(i+j) and i-j<8:
print(i,j)
# 15 10
美国数学家维纳(N.Wiener)智力早熟,11 岁就上了大学。他曾在 1935~1936 年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。
“我年龄的立方是个 4 位数。我年龄的 4 次方是个 6 位数。这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1 次。“
请你推算一下,他当时到底有多年轻?
for i in range(10,30):
i3 = str(i ** 3)
i4 = str(i ** 4)
if len(i3) == 4 and len(i4) == 6:
if len(set(i3+i4)) == 10:
print(i)
print(i3 + i4)
# 18
# 5832104976 舍去
def split_s(string, sep="", num=0):
split_words = []
last_index = 0
count = 0
for index, char in enumerate(string):
if count == num and num > 0:
split_words.append(string[last_index:len(string)])
break
if char == sep:
split_words.append(string[last_index:index])
last_index = index + 1
count += 1
elif index + 1 == len(string):
split_words.append(string[last_index:index + 1])
return split_words
print(split_s("life-is-short-you-need-python",'-'))
# ['life', 'is', 'short', 'you', 'need', 'python']
print(split_s("life-is-short-you-need-python",'-',2))
# ['life', 'is', 'short-you-need-python']
for x in range(1,101):
if x % 2 == 0: # 偶数
a = int((x ** 2) / 2)
else: # 奇数
a = int((x ** 2 - 1) / 2)
print(a)
# 0
# 2
# 4
# 8
# 12
# 18
# 24
# 32
# 40
# 50
输入:HelloWorld
输出:
l # 小写字母 l
3 # 小写字母 l,出现了3次,出现次数最多
def analyse_words(words):
word_dict = {}
for i in words:
if i in word_dict:
word_dict[i] += 1
else:
word_dict[i] = 1
max_key = max(word_dict,key=word_dict.get)
print(max_key)
print(word_dict[max_key])
# l
# 3
analyse_words('helloworld')
输入边长 n,打印对应边长的菱形
def diamond(n):
stack = []
for i in range(1, 2 * n):
if i <= n:
p_str = ' ' * (n - i) + '*' * (2 * i - 1)
if i != n:
stack.append(p_str)
print(p_str)
else:
print(stack.pop())
diamond(5)
# 为了区分我把空格换成了点
# ....*
# ...***
# ..*****
# .*******
# *********
# .*******
# ..*****
# ...***
# ....*
def p(n):
if n == 0:
return
print('递归前->',n)
p(n-1)
print('递归后->',n)
p(5)
# 递归前-> 5
# 递归前-> 4
# 递归前-> 3
# 递归前-> 2
# 递归前-> 1
# 递归后-> 1
# 递归后-> 2
# 递归后-> 3
# 递归后-> 4
# 递归后-> 5
def fib(n):
if n<=2:
return 1
return fib(n-1)+fib(n-2)
print(fib(10)) # 55
print(fib(2)) # 1
a, b, c = 10, 6, 18
if a > b:
max_num = a
else:
max_num = b
if max_num < c:
max_num = c
print(max_num) # 18
def factor_sum(n):
s_sum = 0
for i in range(1, n):
if n % i == 0:
s_sum += i
return s_sum
for j in range(1, 1000):
if j == factor_sum(j):
print(j)
# 6
# 28
# 496
def factor(n):
if n < 2:
return 1
return n * factor(n - 1)
s_sum = 0
for i in range(1, 11):
s_sum += factor(i)
print(s_sum) # 4037913
输入:“()”
输出:True
输入:“()[]{}”
输出:True
输入:“(]”
输出:False
输入:“([)]”
输出:False
def valid_str(string):
if len(string) % 2 == 1:
return False
while '()' in string or '[]' in string or '{}' in string:
string = string.replace('()', '')
string = string.replace('[]', '')
string = string.replace('{}', '')
return string == ''
print(valid_str('()')) # True
print(valid_str('()[]{}')) # True
print(valid_str('()[]{[()]}')) # True
print(valid_str('()[]{[(}]}')) # False
def valid_str(string):
if len(string) % 2 == 1:
return False
stack = []
char_dict = {
')': '(',
'}': '{',
']': '['
}
for char in string:
if char in char_dict:
# 右括号
if not stack or char_dict[char] != stack.pop():
return False
else:
# 左括号
stack.append(char)
return not stack
print(valid_str('(){}[({[]})]')) # True
print(valid_str('(){}[({[)})]')) # False
print(valid_str('')) # True
def is_palindrome(x):
if x < 0 or x > 0 and x % 10 == 0:
return False
str_x = str(x)
return str_x == str_x[::-1]
print(is_palindrome(121)) # True
print(is_palindrome(120)) # False
流程
def is_palindrome(x):
if x < 0 or x > 0 and x % 10 == 0:
return False
reverted = 0
while x > reverted:
# 我们看下 1221
# 第一次循环我们需要把末尾数字1取出来 第二次取末尾数字2 我们需要把21变成12
reverted = reverted * 10 + x % 10
# 把x的末尾数字删除掉
x //= 10
return x == reverted or x == reverted // 10
print(is_palindrome(1221)) # True
print(is_palindrome(1223)) # False
print(is_palindrome(123321)) # True