1.用For循环求100以内的素数
描述
素数又称质数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。在一般领域,对正整数n,如果用2到 n-1之间的所有整数去除,均无法整除,则n为素数。(该算法可优化)
题目要求:求出100以内的所有素数并输出,素数之间以一个英文空格区分。
输入格式
无。
输出格式
在一行中,输出100以内的所有素数,数字之间以英文空格隔开。参考测试用例输出样式。
for i in range(2,100):
for j in range(2,i):
if(i%j==0):
break
else:
print(i,end=" ")
2.用户登录的三次机会
类别:Python 程序控制结构
给用户三次输入用户名和密码的机会,要求如下:
- 如输入第一行输入用户名为 ‘
Kate
’,第二行输入密码为 ‘666666
’,输出 ‘登录成功!
’,退出程序; - 当一共有 3 次输入用户名或密码不正确输出 “
3次用户名或者密码均有误!退出程序。
”。
cnt = 0
while True:
name = input()
password = input()
cnt = cnt+1
if name=="Kate" and password=="666666":
print("登录成功!") #可加可不加break
else:
if cnt>=3:
print("3次用户名或者密码均有误!退出程序。") #可加可不加breakbreak
"""方法二:
count = 0
while count<3:
a = input()
b = input()
if a=='Kate' and b=='666666':
print('登录成功!')
break
else:
count += 1
if count==3:
print('3次用户名或者密码均有误!退出程序。')
"""
3.人生苦短我用python
类型:简单循环
描述
输入一个小于等于12的整数n,逐个输出字符串人生苦短我用python
中前n个字符,每个字符后输出一个半角逗号和一个空隔。
输入
一个小于等于12的整数n
输出
人生苦短我用python
中前n个字符
n = eval(input())
s = "人生苦短我用python"
for i in range(0,n-1+1):
print(s[i], end=", ")
4.十进制整数转二进制
类型:简单循环
描述
十进制整数转二进制的方法是:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序即可得到对应的二进制数的各位。 例如:22转二进制的计算过程:
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
得到22的二进制是10110
输入格式
输入一个非负整数
输出格式
输出对应的二进制数
a = int(input())
s = '' #开个空字符串,用于后面拼接
if a==0:
print('0')
else:
while a!=0:
y = a%2
a //= 2 #向下取整
s += str(y) #字符串拼接
print(s[::-1]) #顺序取反输出
"""方法二:
n = int(input())
if n==0:
s = '0'
else:
s = ''
while n>0:
s = str(n%2)+s #注意这里不能写成s+str(n%2),因为这里的相加是字符串拼接,而非数字的加减法,因而如果写反,那么拼接方向是往前的
n = n//2
print(s)
法三:通过内置bin函数直接可转化
"""
5.阶乘求和
类型:简单循环
描述
输入一个正整数n,计算 1!+2!+3!+...+n! 的和并输出。
输入
一个正整数n
输出
从1到n每个数的阶乘的和
n = eval(input())
s = 1
sum = 0
for i in range(1, n+1):
s *= i
sum += s
print(sum)
6.百钱买百鸡B
描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何。
现在的问题是:用户输入鸡的数量和钱数,鸡翁、鸡母、鸡雏各为多少?如果有解,输出全部解,并按鸡翁数量由少到多的顺序输出;如果无解则输出“无解”。
输入格式
用户在同一行内输入用空格分隔的两个正整数,分别表示鸡的数量和钱数
输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出;
有多组解时,按鸡翁数量由少到多输出;
如果无解则输出“无解”。
num, money = map(int, (input().split())) #不能用eval(input().split()) ??
flag = 0 #如果不设置初始值,那系统取得随机数就有可能也是1
for rooster in range(1, money//5 + 1): #不可以直接用range(m//5),因为在这里x指鸡的个数,题目有要求不为0
for hen in range(1, money//3 + 1):
chick = num-rooster-hen
if chick%3 == 0 and chick>0 and 5*rooster + 3*hen + chick/3 == money:
print(rooster, hen, chick)
flag = 1
if flag != 1:
print('无解')
# map函数是一个映射函数,可以将input里的东西映射为整型,并返回一个迭代器,如果要转换为列表,可以使用 list() 来转换
"""方法二:
num, money = map(int, (input().split()))
flag = True
for x in range(1, num+1):
for y in range(1, num+1):
for z in range(3, num+1, 3):
if (x + y + z == num)and(5*x + 3*y + z/3 == money):
print(x, y, z)
flag = False
if flag == True:
print('无解')
"""
7.中国古代数学问题——李白买酒
描述
诗仙李白,一生好酒。一天,他提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
要求使用循环来计算,不允许使用幂函数。
输入格式:
本题没有输入。
输出格式:
一个整数n,表示李白的酒壶原来有n斗酒。
输入输出示例
无。
n = 0 #最后喝光壶中酒的时候酒量肯定是0斗
for i in range(5):
n = n+1
n = n/2
print(n)
#本题题意可能存在一定缺陷,它是想说李白一路上遇见店和花的顺序一定是先店(*2)后花(-1),先店后花这样循环往复的顺序(即固定了的),并且循环了五次,才把最开始的(0.96875斗)酒喝完
8.计算整数各位数字之和
描述
输入一个正整数,计算其各个位的数字之和
输入
输入一个正整数
输出
各位上数字之和
num = input()
list = list(num)
print(sum(int(i) for i in list))
"""
将list列表old中的数字(char)转为数(int)的三种方法:
new = list(map(lambda x: int(x), old))
new = list(map(int, old))
new = [int(i) for i in old]
"""
"""方法二:
n = input()
list = list(n)
s = 0
for i in range(len(list)):
s += int(list[i])
print(s)
"""
9.输入n,输出2*n-1行的菱形图形
例如:输入4,输出
*
***
*****
*******
*****
***
*
"""
题目实际上应该说:
输入n,输出2*(n-1)-1行的菱形图形,即:
排数 = 最中间*最多的那一排里面*的个数 =2的(n-1)次方-1
eg:n=3,则会有2的2次方-1=3排,且中间一排*数量为3
*
***
*
"""
n = eval(input())
i = 0 #用于计排数
while i!=n-1:
print(' '*(n-i-1) + '*'*(2*i+1))
i += 1
"""以示例为准,以上前半截代码负责前三排*的输出:
i=0
0!=3 (√) x = 框×(4-0-1) + '*'×(2×0+1) = 3框 + 1'*' i=1
1!=3 (√) x = 框×(4-1-1) + '*'×(2×1+1) = 2框 + 3'*' i=2
2!=3 (√) x = 框×(4-2-1) + '*'×(2×2+1) = 1框 + 5'*' i=3
3!=3 (×)
"""
i = 0
while n!=0:
print(' '*(i) + '*'*(2*n-1))
n = n-1
i += 1
"""以示例为准,以上后半截代码负责后四排*的输出:
i=0 n=4
4!=0 (√) x = 框×0 + '*'×(2×4-1) = 0框 + 7'*' n=3 i=1
3!=0 (√) x = 框×1 + '*'×(2×3-1) = 1框 + 5'*' n=2 i=2
2!=0 (√) x = 框×2 + '*'×(2×2-1) = 2框 + 3'*' n=1 i=3
1!=0 (√) x = 框×3 + '*'×(2×1-1) = 3框 + 1'*' n=0 i=4
0!=0 (×)
"""
"""方法二:
n = eval(input())
for i in range(1, n+1): #前四排,i=1,2,3,4
print(" " * (n - i) + "*" * (2 * i - 1)) # ' '是3,2,1,0的顺序;'*'是1,3,5,7的顺序
for i in range(1, n): #后三排,i=1,2,3
print(" " * i + "*" * (2 * (n - i) - 1)) # ' '是1,2,3的顺序;'*'是5,3,1的顺序
"""
10.求和
描述
从键盘输入一行字符,将其中的数字求和并输出结果。
输入格式
输入一个行字符。
输出格式
若字符串中有数字则输出数字之和,若无数字则输出输入字符串中无数字,参看输入输出示例。
import re
x = input()
x1 = re.findall("\d", x) # 正则表达式筛选出符合要求的字符——ps:没看懂原本代码中写的\d+\.\d*|\d+的意义
if len(x1)==0:
print("输入字符串中无数字")
else:
print(f'数字之和是{sum(map(eval, x1))}')
"""方法二:
string = input()
num_count = 0
num = 0
for i in string:
if i.isdigit():
num_count += int(i)
num += 1
if num!=0:
print(f'数字之和是{num_count}')
else:
print('输入字符串中无数字')
"""
11.找数字,做加法(升级版)
描述
使用两个 input() 函数,接收用户的两个输入字符串,每个字符串最多包含一个英文点号“.”,将每个字符串中的数字和点号找出,按顺序组成一个数字。将得到的两个数字求和并输出,如果用户输入的引文点号“.”超过1个,提示输入错误,具体内容参阅以下示例。
输入使用input(),不要增加额外的提示信息。
n1 = input()
n2 = input()
s1, s2 = '', ''
if n1.count('.')>1 or n2.count('.')>1:
print('输入错误')
else:
for i in n1:
if '0'<=i<='9' or i=='.': #这里并不是常规意义上的0<i<9,而是其对应的ASCII码中数字对应的排序的先后比较
s1 = s1+i
for j in n2:
if '0'<=j<='9' or j=='.':
s2 =s2+j
print(eval(s1)+eval(s2))
12.编写程序,输入三角形三条边,先判断是否可以构成三角形,如果可以,则进一步求三角形的周长C和面积S,否则输出“无法构成三角形!”
例如:
(1)输入:3 4 5,输出:C=12.0,S=6.0
(2)输入:1 2 3,输出:“无法构成三角形”
三条边能构成三角形的条件是:(1)每条边均大于0,(2)任意两条边之和大于第三边
a = int(input())
b = int(input())
c = int(input())
if a+b>c and a+c>b and b+c>a:
p = (a+b+c)/2
S = (p*(p-a)*(p-b)*(p-c))**0.5 # 海伦公式
C = a+b+c
print('C=%.1f' %C)
print('S=%.1f' %S)
else:
print('无法构成三角形')
""" 该题目含义表达不正确
如果想使得数字输入时写在同一排的话,该使用:
a, b, c = map(int, (input().split()))
而输出该写成:
print(f'C=%.1f,S=%.1f' %(C, S))
注:
平方也可以通过import math来完成,只需将行6改成
S = math.sqrt(p*(p-a)*(p-b)*(p-c))
"""
13.水费计算
描述
设某单位收取水费的规定是:
每月用水量w<=10吨时,每吨按0.32元计费;
每月用水量w<=20吨时,超过10吨的部分每吨按0.64元计费,10吨以内仍然按每吨0.32元计费;
每月用水量w>20吨时,超过20吨部分每吨按0.96元计费,20吨以内仍按原标准计费。
编写程序根据用户输入的用水量w计算水费x并输出。
注意:自动评阅,输入输出不要加提示字符。
使用如下所示的输入输出语句:
w=eval(input())
print(x)
w = eval(input())
if w<=10:
print(w*0.32)
elif w<=20:
print(3.2 + (w-10)*0.64)
else:
print(3.2 + 6.4 + (w-20)*0.96)